我知道家庭作业问题在这里并不是最受欢迎,但我完全失去了。我正在做一项任务,要求我们制作多种排序算法。然而其中一个让我疯了。我在网上找不到任何关于它的例子,他没有在课堂上完全看过它。我们必须进行如下所示的合并排序:
void mergeSort(int * a, int s, bool n = false)
其中a是数组,s是所述数组的大小,对于二进制合并排序,n为false,对于自然合并排序,则为true。问题是,我无法找到自然合并排序和二进制合并排序。我只是找到mergesort。他们所有人都要求更多的变数。
我只是想问一下是否有人知道在哪里可以找到对这两种不同类型的mergesort的良好解释。
答案 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。无论如何,它可以在算法的开头创建并在最后删除。