/*希尔排序又称缩小增量排序,它也是一种属插入排序的方法
但在时间效率上,较直接插入排序有加大的改进,它的基本思想是:
先将整个待排序记录序列分割成若干个子序列分别直接进行直接插入排序,待
整个序列中的记录”基本有序“时,再对全体记录进行一次直接插入排序
gap增量,即组数也是间隔值
*/
#include<stdio.h>
void Shell(int *arr,int len,int gap)
{
int i;
int j;
int tmp;
for(i=gap;i<len;i++)
{
tmp=arr[i];
for(j=i-gap;j>=0;j-=gap)
{
if(arr[j]<=tmp)//从右到左在有序序列中 找第一个比他小的数据 找到后 放在他的后面
{
break;
}
arr[j+gap]=arr[j];
}
arr[j+gap]=tmp;
}
}
void ShellSort(int *arr,int len)
{
int brr[]={5,3,1};//缩小增量
for(int i=0;i<sizeof(brr)/sizeof(brr[0]);i++)
{
Shell(arr,len,brr[i]);
}
}
int main()
{
int arr[]={5,9,0,23,45,78,65,4,2,1,3,9};
int len=sizeof(arr)/sizeof(arr[0]);
ShellSort(arr, len);
for(int i=0;i<len;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}