# 插入排序(稳定)
一般来说,插入排序都采用 in-place 在数组上实现。具体算法描述如下:
①. 从第一个元素开始,该元素可以认为已经被排序
②. 取出下一个元素,在已经排序的元素序列中从后向前扫描
③. 如果该元素(已排序)大于新元素,将该元素移到下一位置
④. 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置
⑤. 将新元素插入到该位置后
⑥. 重复步骤②~⑤
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| public static void insertionSort(int[] arr){ for( int i = 1; i < arr.length; i++ ) { int temp = arr[i]; for( int j = i; j >= 0; j-- ) { if( j > 0 && arr[j-1] > temp ) { arr[j] = arr[j-1]; System.out.println("Temping: " + Arrays.toString(arr)); } else { arr[j] = temp; System.out.println("Sorting: " + Arrays.toString(arr)); break; } } } }
public static void insertionSort(int[] arr){ for( int i=0; i<arr.length-1; i++ ) { for( int j=i+1; j>0; j-- ) { if( arr[j-1] <= arr[j] ) break; int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; System.out.println("Sorting: " + Arrays.toString(arr)); } } }
public static void insertSort(int[] a,int left,int right){ for (int i = left, j = i; i < right; j = ++i) { int ai = a[i + 1]; while (ai < a[j]) { a[j + 1] = a[j]; if (j-- == left) { break; } } a[j + 1] = ai; } }
|
链接