#if 1
#include<iostream>
// 在插入排序的基础上
void shell_sort(int* k, int len)
{
int i, j, temp = 0;
int gap = len;
do
{
// 随便选一个跨度
// 直接插入排序的每一次进行数个比较改为 每一次 进行逐跨度个比较
// 只要把每一次递增或者递减 1 改为递增或者递减 一个跨度 就好了
gap = gap / 3 + 1;
for (i = gap; i < len; i++)
{
if (k[i] < k[i - gap])
{
temp = k[i];
for (j = i - gap; k[j] > temp; j-=gap)
{
k[j + gap] = k[j];
}
k[j + gap] = temp;
}
}
} while (gap > 1); //当跨度 为 1 是 进行的是最后一次比较 结束
}
int main()
{
int a[] = { 3, 2, 5, 1, 7, 9, 11, 25, 10, 5, 8};
shell_sort(a, 11);
for (int i = 0; i < 11; i++)
{
std::cout << a[i] << " ";
}return 0;
}
#endif
希尔排序
最新推荐文章于 2025-01-21 00:21:24 发布