假设我们有一个名为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个点的正确答案是什么?
答案 0 :(得分:0)
在我看来,在您的示例数据集中,冒泡排序将始终&#34;修复&#34;正好是一个元素,因为每个元素都是乱序的。但是,如果您将0移近原始列表的前面,那么您将生成一些已按排序顺序排列的对。这些对不会被修复&#34;通过冒泡排序,在这种情况下,你可以正确地说,冒泡排序可以“修复”#34;每一步最多1个元素。
所以在一般情况下,你是对的。在您的示例中使用的特定案例中,教师是正确的。
注意:我假设&#34;步骤&#34;指的是将冒泡排序算法应用于集合中的一对数字。
答案 1 :(得分:0)
冒泡排序涉及重复循环遍历数组。在每次通过数组期间,它会在碰到它们时重复交换相邻的元素。
仅当元素出现故障时,从一个条目到另一个条目的每个步骤都会交换。
每次遍历数组都会修复至少一个乱序对,除非没有(即数组已经排序,并且通过没有变化的传递是完成信号)。
我怀疑你正在考虑步骤,而你的教授正在考虑传球,但他不管怎么说,因为有些传球通过整个阵列可以修复不止一个无序对,而最后一个传球没有修复任何东西(因为那时没有什么需要修复)。