直接包含排序

时间:2012-09-09 05:21:27

标签: c++

直接包含排序的另一个名称是什么?相同类型的算法是什么?

我一直在尝试在互联网上搜索,但我没有得到一个直接的答案,但我找不到任何答案。我发现这个算法用于直接插入排序,在一些书中它说它们与直接包含排序相同,但我怀疑它是因为这本书是俄语的,所以我想确认(也就是说,如果它是真的或者我可能有翻译错误?)

C ++中的代码:

int main(int argc, char* argv[])
{
    int arr[8] = {27, 412, 71, 81, 59, 14, 273, 87},i,j;

    for (j=1; j<8; j++){
        if (arr[j] < arr[j-1]) {
            //Что бы значение j мы не меняли а работали с i
            i = j;
            //Меняем местами пока не найдем нужное место
            do{
                swap(arr[i],arr[i-1]);
                i--;
                //защита от выхода за пределы массива
                if (i == 0)
                    break;
            }
            while (arr[i] < arr[i-1]) ;
        }
        for (i=0;i<8;i++)
            cout << arr[i]<< ' ';
        cout << '\n';
    }
    getch();
    return 0;
}

结果

27 412 71 81 59 14 273 87
27 71 412 81 59 14 273 87
27 71 81 412 59 14 273 87
27 59 71 81 412 14 273 87
14 27 59 71 81 412 273 87
14 27 59 71 81 273 412 87
14 27 59 71 81 87 273 412

3 个答案:

答案 0 :(得分:2)

发布的代码为Insertion sort

大多数实现会将无序元素复制到临时变量,然后向后工作,向上移动元素,直到找到正确的开放点“插入”当前元素。这就是维基百科文章中的伪代码所示。

有些实现只是将无序元素向后冒泡,而它小于左边的元素。这就是发布代码中的内部do...while循环显示的内容。

这两种方法都是实现插入排序的有效方法。

答案 1 :(得分:1)

您发布的代码看起来不像插入排序算法,因为您正在重复交换两个相邻元素。

您的代码看起来更像是某种冒泡排序。

这里列出了常见的排序算法: https://en.wikipedia.org/wiki/Sorting_algorithm

“直接插入”和“直接包含”听起来几乎一样..所以我认为它们可能是同一算法的不同名称。

编辑: 可能“直”前缀应该表示只使用了一个容器。但是,如果交换了两个相邻元素,我不会将其称为insert-sort,因为根本没有“插入”。

答案 2 :(得分:0)

鉴于“直接包含排序”一词根本没有产生谷歌命中率,“直接插入排序”只有27次点击,其中前三个是这里的帖子和两个相同的措辞blog { {3}},我怀疑这个词有没有被广泛接受的含义。关于

的问题部分
  

一些书说它们与直接包含直接排序相同

很难回答,除非我们找到了直接包含排序实际上是什么的明确定义。