直接插入排序
public static void insertSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int temp = 0;
int insertIndex = 0;
int gap = array.length / 2; // 增量
while (gap >= 1) {
for (int i = gap; i < array.length; i++) {
temp = array[i];
insertIndex = i - gap; // 比較同組前一個數字
while (insertIndex >= 0 && temp < array[insertIndex]) { // 依次比較同組前一個數字
array[insertIndex + gap] = array[insertIndex];
insertIndex -= gap;
}
array[insertIndex + gap] = temp;
}
gap /= 2; // 縮小增量
}
}
折半插入排序
public static void insertSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int low = 0, high = 0, mid = 0; // 折半查找三個關鍵變量
for (int i = 1; i < array.length; i++) {
int temp = array[i];
low = 0;
high = i - 1;
while (low <= high) { // 進行二分搜索
mid = (low + high) / 2;
if (array[mid] > temp) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (int j = i - 1; j >= low; j--) {
array[j + 1] = array[j];
}
array[low] = temp;
}
}
希爾排序
public static void insertSort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
int temp = 0;
int insertIndex = 0;
int gap = array.length / 2; // 增量
while (gap >= 1) {
for (int i = gap; i < array.length; i++) {
temp = array[i];
insertIndex = i - gap; // 比較同組前一個數字
while (insertIndex >= 0 && temp < array[insertIndex]) { // 依次比較同組前一個數字
array[insertIndex + gap] = array[insertIndex];
insertIndex -= gap;
}
array[insertIndex + gap] = temp;
}
gap /= 2; // 縮小增量
}
}