• 算法_冒泡排序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);
    		}
    	}
    }
    
    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    windows下vagrant使用及工作环境配置
    使用docker搭建lnmp环境
    Docker常用命令
    [docker] 管理docker容器中的数据
    python初始化父类错误
    Linux--
    用少于2MB内存存下5百万个介于0到1千万之间的整数
    k路归并:数组、链表
    剑指offer新思路
    阿里电话面试
  • 原文地址:https://www.cnblogs.com/kknote/p/13991983.html
Copyright © 2020-2023  润新知