算法_冒泡排序python+java实现

思路

/*
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);
		}
	}
}
posted @ 2022-04-05 19:07  我是一言  阅读(23)  评论(0编辑  收藏  举报