二进制合并排序&自然合并排序

时间:2015-04-05 17:34:46

标签: c++ arrays algorithm sorting mergesort

我知道家庭作业问题在这里并不是最受欢迎,但我完全失去了。我正在做一项任务,要求我们制作多种排序算法。然而其中一个让我疯了。我在网上找不到任何关于它的例子,他没有在课堂上完全看过它。我们必须进行如下所示的合并排序:

void mergeSort(int * a, int s, bool n = false)

其中a是数组,s是所述数组的大小,对于二进制合并排序,n为false,对于自然合并排序,则为true。问题是,我无法找到自然合并排序和二进制合并排序。我只是找到mergesort。他们所有人都要求更多的变数。

我只是想问一下是否有人知道在哪里可以找到对这两种不同类型的mergesort的良好解释。

1 个答案:

答案 0 :(得分:2)

我不是这个主题的专家,但维基百科页面似乎是一个很好的起点 http://en.wikipedia.org/wiki/Merge_sort

它包含一个关于自然合并排序的部分和一个示例。

关于二进制合并排序:

  

名为二进制合并排序的变体使用二进制插入排序进行排序   32个元素的组,然后使用合并排序进行最终排序。它   将小数据集上的插入排序速度与速度相结合   大数据集上的合并排序

可以在此处阅读插入排序:http://en.wikipedia.org/wiki/Insertion_sort

包含二进制插入排序的选择。

关于变量。维基百科“自下而上合并排序”(自然合并排序是一种变体)的例子有这个签名:

void BottomUpSort(A[], B[], n)

其中A是要排序的数组,n是它的长度。 B是一个工作数组,如果读取算法,它也需要长度为n。无论如何,它可以在算法的开头创建并在最后删除。