繁体   English   中英

这是shell排序还是插入排序?

[英]Is this a shell sort or an insertion sort?

我刚刚开始学习排序算法,并在网上找到了一个。 起初我认为这是一个shell排序,但它缺少“k”的明显间隔和数组的减半所以我不确定它是否是。 我的第二个猜测是插入排序,但我只是在这里仔细检查:

for(n = 1; n < num; n++)
{
    key = A[n];
    k = n;
    while((k > 0) && (A[k-1] > key))
    {
        A[k] = A[k-1];
        k = k-1;    
    }
    A[k] = key;
}

此外,如果你能解释为什么这也有帮助

Shell Sort包含许多在原始数组的子数组上执行的插入排序。

您提供的代码是插入排序。

为了得到希尔排序,这将是大约有其他for代码改变约S h (壳那种间隙)和启动子数组的索引和内部,而不是从移动kk-1您可以从移动kk+h (或kh取决于你进行插入排序的方向)

我认为你是对的,这看起来很像插入排序

此片段假设已插入 A[0] 如果n == 0 ,那么k > 0检查将失败并且执行将继续在A[k] = key; ,将第一个元素正确存储到数组中。

该片段还假设A[0:n-1]已经排序。 它检查A[n]并开始向后扫描数组,向前移动每个大于原始A[n]键的元素。

一旦扫描遇到小于或等于键的元素,它就会将其插入该位置。

它被称为插入排序,因为行A[k] = key将当前值插入到部分排序的数组中的正确位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM