希尔排序(C语言实现)
程序员文章站
2022-03-04 23:51:22
...
希尔排序
希尔排序又称“增量缩小排序”,它也是一种属插入排序类的方法。
基本思想
先将整个待排记录序列分割成为若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序
希尔排序示例
实现代码
#include<stdio.h>
void ShellInsert(int a[], int gap, int k, int n) //(数组a,增量gap,初始位置k,数组大小n)
{ //对当前数组做一次希尔插入排序。增量为gap
int i, j, tmp;
for(i = k + gap;i < n;i += gap)
{
tmp = a[i];
j = i - gap;
while(j >= 0 && a[j] > tmp)
{
a[j + gap] = a[j];
j = j - gap;
}
a[j + gap] = tmp;
}
}
void ShellSort(int a[], int n)
{
int gap, i;
for(gap = n / 2;gap > 0;gap /= 2) //获取每次增量大小
{
for(i = 0;i < gap;i++) //数组被分为gap组
ShellInsert(a, gap, i, n);
}
for(i = 0;i < n;i++)
printf("%d ", a[i]);
}
int main()
{
int a[] = {49, 38, 65, 97, 76, 13, 27, 49, 55, 04};
int n = sizeof(a)/sizeof(*a); //获取数组长度
ShellSort(a, n);
getchar();
return 0;
}