• 算法_冒泡排序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);
    		}
    	}
    }
  • 相关阅读:
    金盾视频高级加密系统 2016S VIP 注册版 高强度视频加密工具
    Webshell管理+网站后台管理+菜刀
    易 5.2 修正版+破解+完美支持Win8/7
    易5.1破解版+汉语编程
    UltraISOPE 9.6.2.3059简体中文注册版/单文件版+软碟通
    hfs网络文件服务器 2.3
    免费开通二级域名的论坛
    周星驰电影全集+BT种子下载+高清版MKV+周星驰系列电影合集
    DJ音乐盒-专注DJ
    EXE加载皮肤DLL
  • 原文地址:https://www.cnblogs.com/kknote/p/16103484.html
Copyright © 2020-2023  润新知