希尔排序
希尔排序
希尔排序就是变种插入排序算法
将数据分成多个子表,先实现局部有序。
缩小距离组成第二个子表
第三趟
当d=1时
整个表呈现了基本有序,直接进行插入排序。
总体 建议增量为 个数/2
算法实现
如果 当前元素比前面的元素小需要把元素暂存到A[0]中。
相当于插入排序的变种,在插入排序的外层套了一层魂环。
public static void main(String[] args) {
int[] nums={49,38,35,32,65,55,43,90,76};
int n=nums.length;
// insertSort(nums,n);
shellSort(nums,n);
System.out.println(Arrays.toString(nums));
}
public static void shellSort(int A[],int n){
int i,j,d; //d用于记录间距
//d是间距 每次缩小一半
for (d=n/2;d>=1;d=d/2){
//内层是插入排序
for(i=d+1;i<=n;++i){
if (A[i]<A[i-d]){
A[0]=A[i];
for(j=i-d;j>0 && A[j]>A[0];j-=d){
A[j+d]=A[j];
}
A[j+d]=A[0];
}
}
}
}
算法性能分析
空间复杂度O(1)
时间复杂度最坏情况O(n**2)