希尔排序是插入排序的一种类型,也可以用一个形象的叫法缩小增量法
插入排序算法是一个对少量元素进行排序的有效算法。插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较,无论什么时候手中的牌都是排序好的。
下面我们用java描述这两张排序方法,以下为实现代码:
初始化以及打印
public class csharray {
int[] csh={23,57,98,20,82,73,65,50,53}; //初始化数组
int i,len=csh.length;
int[] newarray(){ //初始化新数组
int[] newa=new int[len];
for(i=0;i<len;i++)
newa[i]=csh[i];
return newa;
}
void prArray(int[] newa){ //打印排序后的数组
for(int x:newa)
System.out.print(x+" ");
System.out.println();
}
}
排序实现方法
public class arraysort extends csharray{
int len,k,currendata,i,temp; //数组长度和交换数组
//int[] csh={23,57,98,20,82,73,65,50,53}; //初始化数组
int[] charuarray(int[] newa){ //数组排序处理---插入排序
len=newa.length;
for(i=1;i<len;i++){
currendata=newa[i];
temp=i;
while(temp>0&&newa[temp-1]>currendata){
newa[temp]=newa[temp-1];
temp--;
}
newa[temp]=currendata;
}
return newa;
}
int[] xierarray(int[] newa){ //希尔排序
len=newa.length;
for(k=len/2;k>0;k--){
for(i=k;i<len;i++){
if(newa[i]<newa[i-1]){
currendata=newa[i-1];
newa[i-1]=newa[i];
newa[i]=currendata;
}
}
}
return newa;
}
}
主函数
public class Arraydoem {
public static void main(String[] args) {
arraysort ay=new arraysort();
ay.prArray(ay.charuarray(ay.newarray()));
System.out.println();
ay.prArray(ay.xierarray(ay.newarray()));
}
爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情