分而治之的冒泡排序算法

Posted

技术标签:

【中文标题】分而治之的冒泡排序算法【英文标题】:Divide And Conquer Bubble Sort Algorithm 【发布时间】:2020-07-23 09:09:46 【问题描述】:

本学期我们学习了分而治之,其中问题被划分为子问题,然后像合并排序或快速排序一样解决。 虽然我不是为了让你们解决我的任务而发布这个问题,但我们的教授给了我们一个任务来实现冒泡排序作为一种分而治之的算法,现在我坐在我的笔记本电脑上为冒泡排序的方式挠了几天可以分治算法。 如果我尝试将 冒泡排序 实现为分而治之,则数组必须被划分,当我将数组划分为其最后一个元素然后将其合并回其排序形式时,算法就变成了合并排序。 如果我通过递归调用 bubbleSort(array,size-1) 来实现它,算法就变成了 Reduce and Conquer。 我的问题是“如何将冒泡排序实现为分而治之的算法?

【问题讨论】:

一个快速的谷歌出现cs.iusb.edu/~danav/teach/b424/b424_15_bubblesort.htmlcpp.edu/~gsyoung/CS370/14Sp/parallel_sorting_kla%20Danny.pdf imo,你是对的。合并排序只是冒泡排序(它本身是一种迭代算法)的分而治之的方法。也许你的教授对你做了一个诡计问题。 给定冒泡排序算法及其复杂度为O(n2),将其转换为分治算法并计算其时间复杂度。 假设您刚刚编写了一个常规冒泡排序算法,然后在合并排序中使用它代替了合并助手。 没办法。我怎么知道您已经编写了自己的冒泡排序或合并排序? :) 【参考方案1】:

假设您编写了一个bubblesort 函数,可以让您对数组的一部分进行排序:

bubblesort(arr, start, end)

    // sorts the items from arr[start] to arr[end]

因此,如果您有数组[1,7,4,9,6,3,2,5] 并调用bubblesort(arr, 0, 3),则结果数组将为[1,4,7,9,6,3,2,5]

现在想象一下,如果您拨打这些电话会发生什么:

bubblesort(arr, 0, 1);
bubblesort(arr, 2, 3);
bubblesort(arr, 4, 5);
bubblesort(arr, 6, 7);

然后

bubblesort(arr, 1, 3);
bubblesort(arr, 4, 7);

最后:

bubblesort(arr, 0, 7);

和归并排序是一样的调用模式,但绝对不是归并排序。

【讨论】:

但是还是不行,请问是怎么回事 @WaqasTahir 第一个问题是您的bubbleSort 方法不起作用。先解决这个问题。然后,重新考虑您的mergeSort 在做什么。考虑一下,在调试器中单步执行您的代码。如果您仍然遇到问题,请发布一个新问题,说明您正在尝试做什么,包括您的代码,并描述您遇到的问题。 时间复杂度是多少 @WaqasTahir 这种分而治之的冒泡排序的时间复杂度? O(n^2).

以上是关于分而治之的冒泡排序算法的主要内容,如果未能解决你的问题,请参考以下文章

排序算法`一网打尽

JavaScript之算法设计思想

算法入门五——快速排序算法(中)

学编程必须了解的排序算法——快速排序

java八种排序算法---快速排序

排序算法—冒泡排序算法