1、希尔排序
希尔排序是插入排序的一种改进,该算法冲破O(n2)的第一批算法之一。希尔排序通过比较相距一定间隔的元素进行工作,距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。因此,希尔排序也叫缩小增量排序。希尔排序的最坏时间为N的二次方,不过使用不同的增量序列可使得最坏运行时间降低。
1.1希尔排序的基本步骤
- 计算增量gap=length/2;
- 对每一组gap进行简单的插入排序;
- 继续以gap = gap/2的方式缩小增量;
- 重复2和3,直至增量为1,最后一次进行简单的插入排序。
示例图(参考资料1):
1.2代码(C实现)
#include <stdio.h>
//希尔排序,给出一个数组,进行排序
void Shellsort(int arr[], int N);
int main()
{
int arr[7] = {5,2,3,8,11,9,4};
Shellsort(arr, 7);
int i;
for(i = 0; i < 7; i++)
{
printf(" %d ", arr[i]);
}
return 0;
}
void Shellsort(int arr[], int N)
{
int i, j, gap;
int tmp;
for(gap = N/2; gap > 0; gap /= 2)
for(i = gap; i < N; i++)
{
tmp = arr[i];
for(j = i; j >= gap; j -= gap)
if(tmp < arr[j - gap])
arr[j] = arr[j - gap];
else
break;
arr[j] = tmp;
}
}
参考资料
[1] https://www.cnblogs.com/chengxiao/p/6104371.html