package 快速排序_归并排序_二分查找_等排序;
/*希尔排序
* 升序
* 不稳定
*/
public class ShellSort {
public static void main(String args[]){
int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3 };
int d=arr.length;
while(true){
d=d/2;
for(int i=0;i<d;i++){
for(int j=i+d;j<arr.length;j=j+d){
int temp = arr[j];
int k;
for(k=j-d;k>=0&&arr[k]>temp;k=k-d){
arr[k+d]=arr[k];
}
arr[k+d]=temp;
}
}
if(d==1){
break;
}
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
Sort(arr);
}
public static void Sort(int[] arr){//排序算法
int d=arr.length;
while(true){
d=d/2; //增量
for(int x=0;x<d;x++){
for(int i=x+d;i<arr.length;i=i+d){
int temp = arr[i];
int j;
for(j=i-d;j>=0&&arr[j]>temp;j=j-d)
/*假设增量为5,
* 则第一次比较 第一个和第五个
* 第二次比较第二个和第六个
* 若第一个大于第五个 则把第一个的值赋给第五个,一趟调整之后最后一个应该调整的位置是最大的值即temp
*/
{
arr[j+d]=arr[j];
}
arr[j+d]=temp;
}
}
if(d==1){
break;
}
}
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
java 希尔排序
最新推荐文章于 2018-10-21 20:10:16 发布