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

时间:2011-11-04 00:21:05

标签: c++ c algorithm sorting

我刚刚开始学习排序算法,并在网上找到了一个。起初我认为这是一个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;
}

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

3 个答案:

答案 0 :(得分:5)

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

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

要获得shell排序,它会大致让你的代码周围的其他for改变h(shell排序中的差距)和子数组的起始索引和内部,而不是移动从kk-1,您从k移至k+h(或k-h,具体取决于您执行插入排序的方向)

答案 1 :(得分:1)

我认为你是对的,看起来很像insertion sort

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

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

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

答案 2 :(得分:0)

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