#include<stdio.h>
void ShellSort(int *a,int length)
{
int jump=length; int temp=0; int change=1;
while(jump>0) //while1
{
jump=jump/2;
change=1;
/************************************************************************/
/* 以下while循环表示一个固定步长下的排序
原始是序列: 3 2 4 7 5 9 6
第1个for后: 3 2 4 6 5 9 7 chang=1
第2个for后: 3 2 4 6 5 9 7 change=0 跳出while2
步长jump=3/2变为1:
第1个for之后: 2 3 4 5 6 7 9 chang=1
第2个for之后: 2 3 4 5 6 7 9 chang=0 跳出while2
jump=1/2=0:跳出while1 希尔排序结束
*/
/************************************************************************/
while(1==change&&jump!=0)//while2
{
change=0;
for(int i=0;i<length-jump;i++)
{
if(a[i+jump]<a[i])
{
temp=a[i+jump];
a[i+jump]=a[i];
a[i]=temp;
change=1;
}
}
}
}
}
void display(int a[],int n)
{
int i=0;
while(i<n)
{
printf("%d ",a[i]);
i++;
}
}
void main()
{
int a[]={3,2,4,7,5,9,6};
int length=sizeof(a)/4;
ShellSort(a,length);
display(a,length);
}
时间: 2024-10-26 12:21:29