不停的往一个数组中添加数字(新来的数字),数组有序,新数字进入数组后会和右边判断大小,比他小则往左移一位,移后再进行判断,知道新来的数字 >= 左边的数字停止判断,数组再次有序
数组为 147 **有序** 添加一个数字 2 2 < 7,和7交换位置 1427 2 < 4,和4交换位置 1247 2 > 1,停止交换的判断 数组为 1247 **数组再次有序** 添加一个新数字 5 此时数组为 1247 **有序** 5 < 7,和7 交换位置 12457 5 > 4,停止交换的判断 数组为12457 **再次有序**
代码: InsertionSort.java
package cn.Text; public class InsertionSort { public static void insertsort(int[] arr) { if (arr==null || arr.length<2){ return; } //0~0有序 0~1有序 0~2有序 0~3有序 ... 0~n-1 有序 索引 for (int i = 1; i < arr.length; i++) { while(i-1>=0 && arr[i-1]>arr[i]){ Swap(arr,i-1,i); i--; } } // for (int i = 1; i < arr.length; i++) { // int CurrentNumberIndex=i; // while(CurrentNumberIndex-1>=0 && arr[CurrentNumberIndex-1]>arr[CurrentNumberIndex]){ // Swap(arr,CurrentNumberIndex-1,CurrentNumberIndex); // CurrentNumberIndex--; // } // } } public static void Swap(int [] arr ,int i,int j){ int tmp=arr[j]; arr[j]=arr[i]; arr[i]=tmp; } public static void PrintArray(int [] arr){ for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]+" "); } System.out.println(); } public static void main(String[] args) { int[] arr={5,9,13,22,4,56,3}; PrintArray(arr); insertsort(arr); PrintArray(arr); } }