定义:
-
时间复杂度:最好O(nlogn)、最坏O(n2)、平均O(n2)
-
空间复杂度:O(1)
-
稳定否:不稳定
-
思想:分组实现插入排序,元素之间距离为gap;直到gap为1完成排序;本质上是对插入排序的优化;
-
就是gap为1的插入排序
-
减少交换次数,更快速的排序到指定位置
-
实现:
/**
* 希尔排序
*
* @param array 排序数组
* @return 排序结果
*/
public static int[] shellSort(int[] array) {
int n = array.length;
for(int gap = n >> 2;gap >= 1;gap = gap >> 2){
for (int low = gap; low < array.length; low++) {
int t = array[low]; // 要插入的元素
int i = low - gap; // 要插入元素的前一个索引位置
while (i >= 0 && t < array[i]) {
// 进行位置的移动,留出要插入的位置
array[i+gap] = array[i];
i -= gap;
}
// 找到位置
if (i + gap != low) { // 如果不是原来的值
array[i + gap] = t;
}
}
}
return array;
}