思路
/*
5
2
3
1
4
每次从底端开始和上一个比较,最小的升到顶端,最大的沉到底端
第1轮比较,比较4次,冒出来第一小的1
1
5
2
3
4
第2轮比较,比较3次,冒出来第二小的2
1
2
5
3
4
第3轮比较,比较2次,冒出来第三小的3
1
2
3
5
4
第4轮比较,比较1次,冒出来第四小的4
1
2
3
4
5
*/
时间复杂度T(n)=O(n^2)
算法描述
当我们遍历第1遍时,比较了n-1次,把最大的数排在了x[n-1]的位置;
第2遍比较了n-2次,把第二大的数排在了x[n-2]的位置;
第n-1遍比较了1次,把倒数第二大的数排在了x[1]的位置。
这样,我们总共比较的次数是1+2+3+...+(n-1) = n(n-1)/2,最大的影响因子是n2,故其时间复杂度是O(n2)
PYTHON实现
# 冒泡排序
def bubble(lst):
# 控制比较轮次,每一轮冒出最小的,第二轮冒出第二小的
max_idx = len(lst) - 1
for i in range(1, len(lst)):
# 控制比较次数,从数组底端一直比到数组顶端
for j in range(max_idx):
if lst[max_idx-j] < lst[max_idx-j-1]:
lst[max_idx-j], lst[max_idx-j-1] = lst[max_idx-j-1], lst[max_idx-j]
return lst
lst = [3, 5, 1, 6, 2, 10]
print(bubble(lst))
JAVA实现
import java.util.Arrays;
public class ArrBubble{
public static void main(String[] args){
int[] arr = new int[]{5,2,3,1,4};
//控制比较轮次,每一轮冒出来第一小,第二轮确认第二小
for(int i=1;i<arr.length;i++){
//控制比多少次,从数组底端一直比到顶端
for(int j=arr.length-1;j>=i;j--){
if(arr[j]<arr[j-1]){
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
for(int value:arr){
System.out.println(value);
}
}
}