对于一个一维的数组(列表),每个元素都和它旁边的元素作比较,顺序不对就交换位置。第一次处理全部n个元素,最大值将冒泡到数组末尾位置。第二次处理全部n-1个元素,第三次处理全部n-2个元素。以此类推,每次都将最大值元素放到最右边的位置。冒泡法的优点是任何时候数组完全排好序就可以提前退出。
For i = n to 1
For j = 1 to i
in_order 标志设置为true
if arr[j+i] < arr[j]
交换arr[j+i] 和arr[j]
in_order 标志设置为false
如果in_order满足要求,跳出循环
注:不要逻辑变量in_order(python,C++叫布尔变量)也行,可以简化代码。但这样不能提前退出循环。
Fortran以及python实现:
冒泡排序步骤遍历列表并比较相邻的元素对。如果元素顺序不符合要求,则交换它们。重复遍历列表未排序部分的元素,直到完成列表排序。因为冒泡排序重复地通过列表的未排序部分,所以它具有最坏的情况复杂度O(n^2)。