文章目录
1.希尔排序理论
通过比较相距一定间隔的元素,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻的元素的最后一趟位置。
初始间隔一般为 n/2 (n为元素个数)
如图所示:
2.希尔排序代码实现
class Test{
/**
* 希尔排序基础实现
* @param array 目标数组
* @param n 初始间距
* @return
*/
public static int[] shellSort(int[] array,int n) {
for(int sub = n; sub>0 ; sub /= 2){
for(int i= sub; i<array.length; i++) {
int tem = array[i];
int j;
// 这里加入了插入排序的思想
for( j = i; j >= sub; j -= sub) {
if(tem < array[j-sub]) {
array[j] = array[j-sub];
}
else break;
}
array[j] = tem;
}
}
return array;
}
public static void shellSortTest(){
int[] numbs = {3,9,2,5,7,1};
shellSort(numbs,numbs.length/2);
System.out.println(Arrays.toString(numbs));
}
public static void main(String[] args) {
shellSortTest();
}
}
执行结果:[1, 2, 3, 5, 7, 9]
其时间复杂度比较优秀:最好为O(n), 最坏时取决于间隔序列
空间复杂度:最坏O(n)
相比与冒泡排序和插入排序,这个排序还是比较优秀的!!