您的位置:首页 > 编程语言 > Java开发

希尔排序java版

2016-05-15 15:48 429 查看
希尔排序采用采取跳跃分隔的策略:将相距某个增量的记录组成一个子序列,将序列做到基本有序(小的关键字基本在前面,大的关键字基本在后面)

package 数据结构各种排序;

public class ShellSort {
public static void main(String args[]){
int[] data = {9,1,5,8,3,7,4,6,2};
for(int i=0;i<data.length;i++){
System.out.print("--"+data[i]);
}
System.out.println("\n排序之后:");
data = sort(data);
for(int i=0;i<data.length;i++){
System.out.print("--"+data[i]);
}
System.out.println();
}
//希尔排序过程,从小到大
public static int[] sort(int[] data){

//添加第一个数为哨兵
int[] tmp = new int[data.length+1];
tmp[0]=0;
for(int i=0;i<data.length;i++){
tmp[i+1] = data[i];
}

int i,j;
//设置增量
int increment = tmp.length;
//先执行再判断
do{
//增量可以根据实际来设置,不同的设置效率不一样,最终增量归1
increment = increment/3+1;
for(i=increment+1;i<tmp.length;i++){
if(tmp[i]<tmp[i-increment]){
tmp[0] = tmp[i];
for(j=i-increment;j>0&&tmp[0]<tmp[j];j-=increment){
tmp[j+increment] = tmp[j];
}
tmp[j+increment] = tmp[0];
}
}
}while(increment>1);

for(i=0;i<data.length;i++){
data[i] = tmp[i+1] ;
}
return data;

}
}
输出结果:
--9--1--5--8--3--7--4--6--2
排序之后:
--1--2--3--4--5--6--7--8--9


希尔排序并不是一种稳定的排序算法,但是希尔排序使得计算机突破了慢速排序的时代(o(n^2))。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息