冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,就像水中的气泡一样。
以下是冒泡排序算法的详细步骤:
开始排序:从数列的第一个元素开始,比较相邻的两个元素。
比较和交换:如果第一个元素比第二个元素大,则交换它们的位置。这样,经过第一轮比较后,数列中最大的元素会被放到它最终应该在的位置(即数列的最后一个位置)。
重复比较:继续比较下一对相邻元素,同样进行交换如果需要。重复这个过程,直到你到达数列的末尾。
一轮完成:完成第一轮遍历后,最大的元素已经定位,剩下的未排序部分是数列的前 n-1 个元素(假设数列长度为 n)。
重复过程:对剩余的未排序部分重复上述过程,每一轮都会将次大的元素放到它最终应该在的位置。
优化(可选):如果在一轮遍历中没有发生任何交换,这意味着数列已经排序完成,可以提前结束算法。
结束条件:当进行到只剩下一个元素时,排序完成。
以下是冒泡排序的伪代码示例:
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
if A[i] > A[i+1] then
swap( A[i], A[i+1] )
swapped = true
end if
end for
n = n - 1
until not swapped
end procedure
冒泡排序算法的时间复杂度是 O(n^2),在最坏的情况下(即数列完全逆序)需要进行 n*(n-1)/2 次比较和交换。在最好的情况下(数列已经是排序状态),时间复杂度是 O(n),因为每轮遍历都不会发生交换,算法会在第一轮就检测到这一点并结束。