希尔排序 – 增量排序
1.希尔排序的思想
现将数据分成d个组, 在每个分组内使用直接插入排序算法排序 – 目的就是使得整个数据序列越来越有序。
接着将数据继续分组(分组数会越来越小),然后排序, 最后一次分组肯定为1。每个分组数一般是互质的。
2.希尔排序的实现
void Shell(int *arr, int len, int group)
{
for (int i = group; i < len; ++i) // i负责遍历整个数据段, 控制本次直接插入排序处理那一组的数据
{
int tmp = arr[i];
int j = i - group;
for (; j >= 0; j -= group)
{
if (arr[j] <= tmp)
{
break;
}
arr[j + group] = arr[j];
}
arr[j + group] = tmp;
}
}
/*
时间复杂度:O(n^1.3--1.5)
空间复杂度: O(1)
稳定性: 不稳定
*/
void ShellSort(int *arr, int len)
{
int group[] = { 5,3,1 };
for (int i = 0; i < sizeof(group) / sizeof(group[0]); ++i)
{
Shell(arr, len, group[i]);
}
}