相关知识
基本思想
基本思想:增量分组,直接插入排序,缩小增量
代码实现
实现1:交换
public static void shellSort(int[] array) {
for (int gap = array.length / 2; gap > 0; gap /= 2) {
for (int i = gap; i < array.length; i++) {
for (int j = i - gap; j >= 0 && array[j] > array[j + gap]; j -= gap) {
int tmp = array[j];
array[j] = array[j + gap];
array[j + gap] = tmp;
}
}
}
}
实现2:平移
public static void shellSort(int[] array) {
for (int gap = array.length / 2; gap > 0; gap /= 2) {
for (int i = gap; i < array.length; i++) {
if (array[i] < array[i - gap]) {
int tmp = array[i];
int j = i - gap;
for (; j >= 0 && array[j] > tmp; j -= gap) {
array[j + gap] = array[j];
}
array[j + gap] = tmp;
}
}
}
}
算法复杂度
- 时间复杂度:O(NlogN)
- 空间复杂度:O(1)
算法稳定性
算法稳定性:不稳定