试图理解贝壳排序
Trying to understand a shell sort
我试图理解我在网上找到的shell排序。这是代码:
for(increment = size/2;increment > 0; increment /= 2)
{
for(i = increment; i<size; i++)
{
temp = array[i];
for(j = i; j >= increment ;j-=increment)
{
//perform the insertion sort for this section
if(temp < array[j-increment])
{
array[j] = array[j-increment];
}
else
{
break;
}
}
array[j] = temp;
}
}
我知道第一个循环不断将数组中的元素数除以 2,直到达到 1。但我并不真正理解代码的其余部分。
首先,阅读插入排序。
最里面的循环执行插入排序的一部分,将元素插入到起点"左侧"的(大概(排序子数组中,但只考虑interval
倍数的元素。第二个循环(for(i=...
(执行插入排序的另一半,在数组中前进;当这个循环结束时,整个数组被排序,但只是在某种意义上,没有由interval
倍数分隔的无序元素。也就是说,没有i
和k
使得数组[i]>数组[i+k*间隔]。
最外层的循环遍历越来越小的间隔,直到它对整个数组进行"完整"插入排序。
我想从大间隔开始的想法是通过允许非常大或非常小的元素"跳过"数组的大部分而不是爬过每个位置来加快整个排序的速度; 这有多好并不明显......
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 试图理解贝壳排序