📜  DAA气泡排序

📅  最后修改于: 2020-12-10 03:49:58             🧑  作者: Mango

DAA气泡排序

冒泡排序(也称为Exchange排序)是一种简单的排序算法。它的工作方式是重复遍历要排序的列表,一次比较两个项目,如果顺序错误则交换它们。重复遍历列表,直到不需要交换为止,这意味着对列表进行了排序。

这是所有排序算法中最简单的方法。

算法

步骤1➤初始化

set 1 ← n, p ← 1 

步骤2➤循环,

Repeat through step 4 while (p ≤ n-1) 
set E ← 0 ➤ Initializing exchange variable. 

步骤3➤比较,循环。

Repeat for i ← 1, 1, …... l-1.
if (A [i] > A [i + 1]) then
set A [i] ↔ A [i + 1] ➤ Exchanging values. 
Set E ← E + 1

步骤4➤完成,或减小尺寸。

if (E = 0) then 
exit 
else 
set l ← l - 1.

气泡排序如何工作

  • 气泡排序从第一个索引开始,使其成为气泡元素。然后,它将bubble元素(当前是我们的第一个索引元素)与下一个元素进行比较。如果气泡元素较大而第二个元素较小,则它们都将交换。交换之后,第二个元素将成为气泡元素。现在,我们将像前面步骤中那样将第二个元素与第三个元素进行比较,并根据需要交换它们。遵循相同的过程,直到最后一个元素。
  • 在其余的迭代中,我们将遵循相同的过程。每次迭代后,我们将注意到未排序数组中存在的最大元素已到达最后一个索引。

对于每次迭代,气泡排序将与最后一个未排序的元素进行比较。

一旦所有元素按升序排序,该算法将终止。

考虑以下未排序数组的示例,我们将在气泡排序算法的帮助下进行排序。

原来,

通行证1:

  • 比较01

由于0 1,因此数组将保持原样。

  • 比较12

现在a 1 > a 2 ,所以我们将交换它们两者。

  • 比较23

由于2 3,因此数组将保持原样。

  • 比较34

这里3 > a 4 ,所以我们将再次交换它们。

通行证2:

  • 比较01

由于0 1,因此数组将保持原样。

  • 比较12

这里1 2 ,因此数组将保持原样。

  • 比较23

在这种情况下,a 2 > a 3 ,因此它们都将被交换。

通过3:

  • 比较01

由于0 1,因此数组将保持原样。

  • 比较12

现在1 > 2,所以它们都将被交换。

通行证4:

  • 比较01

这里0 > a 1 ,所以我们将交换它们两者。

因此,对数组进行排序是因为不再需要交换。

气泡排序的复杂度分析

输入:给定n个输入元素。

输出:对列表进行排序的步骤数。

逻辑:如果给我们n个元素,则在第一遍中将进行n-1个比较;在第二遍中,它将执行n-2;在第三遍中,它将执行n-3,依此类推。因此,可以通过以下方式找到比较的总数:

因此,气泡排序算法包含O(n 2 )的时间复杂度和O(1)的空间复杂度,因为它需要一些额外的存储空间来交换临时变量。

时间复杂度:

  • 最佳情况复杂度:对于已排序的数组,冒泡排序算法的最佳情况下时间复杂度为O(n)。
  • 平均案例复杂度:冒泡排序算法的平均案例时间复杂度为O(n 2 ) ,当两个或多个元素混杂在一起时(即,既不是升序也不是降序),就会发生这种情况。
  • 最坏情况的复杂度:最坏情况下的时间复杂度也是O(n 2 ) ,当我们将数组的降序排序为升序时会发生。

冒泡排序的优点

  • 容易理解。
  • 不需要任何额外的内存。
  • 该算法的代码很容易编写。
  • 比其他分类算法所需的空间最小。

冒泡排序的缺点

  • 当我们有大量未排序的列表时,它不能很好地工作,并且它需要更多的资源,而这最终需要花费大量的时间。
  • 它仅用于学术目的,不用于实际实现。
  • 它涉及n 2个步骤对算法进行排序。