package com.eight.paixu;
/*
* 希尔排序法:希尔排序(ShellSorting)又称为“缩小增量排序”。
* 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
* 希尔排序:分组交换的思想,先分组,后交换排序
属于交换类排序
不稳定的排序算法 :分组之后交换打破了稳定性
平均时间复杂度O(n*log2n)
最坏时间复杂度O(n^s) 1<s<2
空间复杂度O(1)
n较大时适用
*/
public class SheelSort {
public static void main(String[] args){
int a[]={3,2,4,7,5,8,6,9};
sheelSort(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
}
public static void sheelSort(int a[]){
int d=a.length;
while(d!=0){
d=d/2;//类似插入排序,只是插入排序增量是1,这里增量是d,把1换成d就可以了
for(int x=0;x<d;x++){//分的组数
for(int i=x+d;i<a.length;i+=d){//组中的元素,从第二个数开始
int j=i-d;//j为有序序列最后一位的位数
int temp=a[i];//要插入的元素
for(;j>=0&&temp<a[j];j-=d){//从后往前遍历。
a[j+d]=a[j];//向后移动d位
}
a[j+d]=temp;
}
}
}
}
}
八大排序之希尔排序
最新推荐文章于 2022-03-10 21:29:45 发布