基本思路:
希尔排序实际上是,定义一组增量在增量内进行插入排序,并逐步缩小这个增量,(因此它又称缩小增量排序)
时间复杂度:
O(n^(1.3-2))
尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择
空间复杂度:
常数阶 O(1)
图解:
假设存在一个长度为8的无序数组 ,
第一步
在第一次定义增量时,增量为四组,在每一组内部使用插入排序来交换位置

第二步
第二次缩小增量,增量缩减为2组,在每组内部使用插入排序
di
第三步
继续缩小增量,此时增量为1,进行插入排序后得到排序结果

代码示例:
package paixu;
import java.util.Arrays;
public class xier {
public static void main(String[] args) {
int arr[] = new int[]{5,6,8,4,1,2,0};
paixu(arr);
}
public static void paixu(int[] arr){
for(int grap = arr.length;grap > 0;grap /=2){
for(int i = grap;i < arr.length;i++){
for(int j = i - grap;j >= 0;j-=grap){
if(arr[j] > arr[j+grap]){
int temp = arr[j];
arr[j] = arr[j + grap];
arr[j + grap] = temp;
}else{
break;
}
}
}
}
System.out.println(Arrays.toString(arr));
}
}
希尔排序是一种改进的插入排序算法,通过定义增量序列逐步减少排序间隔,提高排序效率。其时间复杂度介于O(n^(1.3-2))之间,适合中等规模的数据排序。该文介绍了希尔排序的基本思想、步骤,并提供了Java代码示例,展示了具体排序过程。
692

被折叠的 条评论
为什么被折叠?



