public void insertSort(int[] array) { int length = array.length; //遍歷無序區間[1, length) for (int i = 1; i < length; i++) { //表示當前須要被插入到有序區間的元素 int tmp = array[i]; int j; //遍歷有序區間[0, i) //不寫等因而爲了保證排序的穩定性 for (j = i - 1; j >= 0 && array[j] > tmp; j--) { array[j + 1] = array[j]; } array[j + 1] = tmp; } }
public void insertSort2(int[] array) { int length = array.length; //遍歷無序區間[1, length) for (int i = 1; i < length; i++) { //遍歷有序區間 for(int j = i; j >0; j--) { //若是待排序元素小於有序區間的最後一個元素就與其交換 if(array[j] < array[j - 1]) { int tmp = array[j]; array[j] = array[j - 1]; array[j - 1] = tmp; } } } }
折半插入排序ide
代碼:性能
public void bsInsertSort(int[] array) { for(int i = 1; i < array.length; i++) { int tmp = array[i]; int left = 0; int right = i; //在有序區間內進行二分查找操做,找到要插入的位置 while(left < right) { int mid = (right + left) >>> 1; if(array[mid] <= tmp) { left = mid + 1; } else { right = mid; } } //將有序區間內[left, i)中的元素向後移動一位 for(int j = i - 1; j >= left; j--) { array[j + 1] = array[j]; } array[left] = tmp; } }