网站首页 文章专栏 20191202希尔排序-不太熟悉.md
20191202希尔排序-不太熟悉.md
创建于:2021-07-04 08:28:21 更新于:2024-04-29 15:07:17 羽瀚尘 285




先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 0 do:
  for i = inc .. n − 1 do:
  temp ← a[i]
  j ← i
  while j ≥ inc and a[j − inc] > temp do:
  a[j] ← a[j − inc]
  j ← j − inc
  a[j] ← temp
  inc ← round(inc / 2.2)
c
#include
#include

#define MAXNUM 10

void main()
{
void shellSort(int array[],int n,int t);//t为排序趟数
int array[MAXNUM],i;
for(i=0;i=i%dk)&&array[j]>temp;j-=dk)//比较与记录后移同时进行
array[j+dk]=array[j];
if(j!=i-dk)
array[j+dk]=temp;//插入
}
}

//计算Hibbard增量
int dkHibbard(int t,int k)
{
return (int)(pow(2,t-k+1)-1);
}

//希尔排序
void shellSort(int array[],int n,int t)
{
void shellInsert(int array[],int n,int dk);
int i;
for(i=1;i<=t;i++)
shellInsert(array,n,dkHibbard(t,i));
}

//此写法便于理解,实际应用时应将上述三个函数写成一个函数。
”`