/*
希尔排序(Shell)
1.将n个元素array 分成n/2个数字序列,第一个数据和第n/2+1
个数据为一对,并排好顺序
2.分成n/4个序列,再次排序
3.直到序列为一为止
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 10
void ShellSort(int *a,int len)
{
int i,j,h;
int r,temp;
int x=0;
for(r=len/2;r>=1;r/=2)
{
for(i=r;i<len;i++)
{
temp=a[i];
j=i-r;
while(j>=0&&temp<a[j])
{
a[j+r]=a[j];
j-=r;
a[j+r]=temp;
}
x++;
printf("第%d步排序结果:",x);
for(h=0;h<len;h++)
{
printf("%d ",a[h]);
}
printf("\n");
}
}
}
void main()
{
int i;
int array[SIZE];
srand(time(NULL));
for(i=0;i<SIZE;i++)
{
array[i]=rand()%100+1; //1-100
}
printf("排序前: \n");
for(i=0;i<SIZE;i++)
{
printf("%d ",array[i]);
}
printf("\n");
ShellSort(array,SIZE);
printf("排序后:\n");
for(i=0;i<SIZE;i++)
{
printf("%d ",array[i]);
}
printf("\n");
}
希尔排序(Shell)
最新推荐文章于 2024-06-21 06:03:16 发布