有人可以解释一下这个关于冒泡排序的声明背后的逻辑吗?

时间:2011-12-15 23:04:50

标签: sorting bubble-sort

假设我们有一个名为A的数组。

令Π是一组(x,y)对,其中x,y是存在于A和索引(x)<1的数组中的值。 index(y)和x&gt; y。

所以例如,如果我们有这个数组

      3 2 9 8 3 0

然后(3,2)将在Π中。 (3,0)也将在Π。

Π中的所有对将是以下

   { (3,2), (3,0), (8,0), (9,0),(9,3),(2,0),(8,3),(9,8) }

我希望我没有忘记一些事情

我意识到如果我们修复所有这些对,那么我们将对数组进行排序。当我说修复时,我的意思是,例如(3,2)使它(2,3)和其他人也是

我不明白的是,每个步骤有多少对气泡排序修复?我的老师告诉我1,我不明白这个

让我们运行冒泡排序

 3 2 9 8 3 0
 2 3 9 8 3 0
 2 3 9 8 3 0
 2 3 8 9 3 0
 2 3 8 3 9 0
 2 3 8 3 0 9

 2 3 8 3 0 9
 2 3 8 3 0 9
 2 3 3 8 0 9
 2 3 3 0 8 9

 2 3 3 0 8 9
 2 3 3 0 8 9
 2 3 0 3 8 9

 2 3 0 3 8 9
 2 0 3 3 8 9

 0 2 3 3 8 9

是不是有一些冒泡排序无法修复的步骤?那么,冒泡排序在每一步中最多只能修复1个点的正确答案是什么?

2 个答案:

答案 0 :(得分:0)

在我看来,在您的示例数据集中,冒泡排序将始终&#34;修复&#34;正好是一个元素,因为每个元素都是乱序的。但是,如果您将0移近原始列表的前面,那么您将生成一些已按排序顺序排列的对。这些对不会被修复&#34;通过冒泡排序,在这种情况下,你可以正确地说,冒泡排序可以“修复”#34;每一步最多1个元素。

所以在一般情况下,你是对的。在您的示例中使用的特定案例中,教师是正确的。

注意:我假设&#34;步骤&#34;指的是将冒泡排序算法应用于集合中的一对数字。

答案 1 :(得分:0)

冒泡排序涉及重复循环遍历数组。在每次通过数组期间,它会在碰到它们时重复交换相邻的元素。

仅当元素出现故障时,从一个条目到另一个条目的每个步骤都会交换。

每次遍历数组都会修复至少一个乱序对,除非没有(即数组已经排序,并且通过没有变化的传递是完成信号)。

我怀疑你正在考虑步骤,而你的教授正在考虑传球,但他不管怎么说,因为有些传球通过整个阵列可以修复不止一个无序对,而最后一个传球没有修复任何东西(因为那时没有什么需要修复)。