#include<stdio.h>
#include<stdlib.h>
//输出
void print(int *a,int length)
{
for (int i = 1; i < length; i++)
printf("%d ",a[i]);
printf("\n");
}
//shell排序的过程
//数组第一个数据,不使用。
void pro(int *a, int length,int len)
{
for (int i = 1+len; i <= length; i++)//直接插入排序
{
if (a[i] < a[i - len])
{
a[0] = a[i];
int j = 0;
for (j=i-len;a[j]>a[0]&&j>0;j-=len)
{
a[j + len] = a[j];
}
a[j+len] = a[0];
}
}
}
//shell排序
void shell(int *a,int length,int *dalte,int len)//以不同的间隔,加快排序的过程
{
for (int i = 0; i < len; i++)
pro(a,length,dalte[i]);
}
int main(void)
{
int a[] = {9999,4,5,8,9,2,3,0,6,7,45,98,415,31,8489,66,58};
int dalte[] = {4,2,1};//或者{5,3,1}
print(a,sizeof(a)/sizeof(int));
shell(a, sizeof(a) / sizeof(int)-1,dalte,sizeof(dalte)/sizeof(int));
//传入的长度是将要排序的数组的长度
print(a, sizeof(a) / sizeof(int));
return 0;
}
shell排序
最新推荐文章于 2024-09-12 20:31:29 发布