排序算法之——希尔排序
算法原理:
1、先将数据分为d个组,在每一组数据中使用直接插入排序算法来进行排序。void Shell
先比较同组前两个数据,再比较比较之后的同组的后两个数据
2、接着继续将数据分组(分组数越来越小),最后一次分组肯定为1,每一个分组数一般是互质的(5,3,1)
void ShellSort
目的: 使得整个数据越来越有序
时间复杂度: O(n^1.3 --1.5)
空间复杂度: O(1)
稳定性: 稳定
代码实现:
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;
}
}
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]);
}
}
程序运行截图: