package com.zhiru;
/*
* 希尔排序的思路就是:
* 1.用一个间隔gap将待排序序列划分为gap个子序列。
* 2.所有距离为gap的元素放在同一个子序列中
* 3.对各个子序列进行直接插入排序。
* 4.然后缩小间隔gap[gap=(gap/3+1)]
* 5.重复子序列划分和直接插入排序.
*
*/
public class ShellSort {
public static void shellSort(int[]a,int left,int right){
if(a!=null){
int temp;
int i,j,gap=right-left+1;//增量初始值
do{
gap=gap/3+1;//增量缩小方式
for(i=left+gap;i<=right;i++){//处理各个子序列
System.out.print("直接插入排序前:a["+i+"]="+a[i]+" "+"a["+(i-gap)+"]="+a[i-gap]);
System.out.print("\n");
if(a[i]<a[i-gap]){
temp=a[i];j=i-gap;
do{
a[j+gap]=a[j];//后移元素
j=j-gap;//在比较前一元素
}while(j>=left&&temp<a[j]);
a[j+gap]=temp;
}
System.out.print("直接插入排序后:a["+i+"]="+a[i]+" "+"a["+(i-gap)+"]="+a[i-gap]);
System.out.print("\n");
}
}while(gap>1);
for(int k=0;k<a.length;k++){
System.out.print(a[k]+" ");;
}
//System.out.print("\n");
}
}
}
数据结构之希尔排序
最新推荐文章于 2023-09-19 19:05:03 发布