您的位置:首页 > 其它

常用算法之希尔排序

2018-03-11 10:57 253 查看
希尔排序是对直接插入排序的改进
改进的地方:将按一定的规模分成几个小组,再每个小组中来分别进行直接插入排序
希尔排序的基本思想:按照一定的分组规模,将数组分成几个小组,分别对数组进行插入排序,一般分组规模是按照当前数组的长度/2来获取的
希尔排序的实现方法:
1.按照将数组/2的规模来分组,得到的数是几,那么也就意味着,需要分别进行几次插入排序 
2.组分好之后,需要确定每组的首元素,之后才能确定每组的其他元素。
3.将每组的除首元素之外的元素跟他之前的数字比较,若小于前面的数,那么前面的数后移,后面的数前移。
实现代码:
package sort;
//希尔排序
//思想:将数组按照一定的增量来划分成不同的组
//不同的组在自己的组内进行插入排序
//增量按照一定的规则来逐渐的递减
public class shell {
public static void sort(int[] a){
int length = a.length;
int step = length/2;
//确定遍历组数
for(;step>0;step/=2){
//确定每组的首位成员
for(int i = 0;i<length/2;i++){
//确定每组数除了首位成员的每位成员
for(int j=i+step;j<length;j+=step){
//让每组数的每个成员跟它之前的数进行比较
for(int k=j-step;k>=0;k-=step){
if(a[k+step]<a[k]){
int temp = a[k+step];
a[k+step] = a[k];
a[k] = temp;
}
}
}
}
}

}
public static void main(String[] args) {
int[] a = {5,4,3,2,1,0};
sort(a);
for(int i:a){
System.out.println(i);
}

971b
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: