• 冒泡排序(时间复杂度O(n^2))


    代码

    package com.suanfa;
    
    import java.util.Arrays;
    
    /**
     * TODO 
     * 
     * @author kakaluote
     * @date 2021年9月10日 上午9:07:58
     */
    public class BubbleSort {
    
    	static int[] arr = {6,7,0,-5,8,1,3,2};
    	
    	public static void main(String[] args) {
    		System.out.println("排序前:" + Arrays.toString(arr));
    		bubbleSort(arr);
    		System.out.println("排序后:" + Arrays.toString(arr));
    	}
    
    	private static void bubbleSort(int[] arr) {
    		int temp;
    		/**
    		 * 可以从结果中看出来,第四次已经出结果,
    		 * 后边就不用再排序了,直接退出就ok了,
    		 * 可以用flag优化
    		 * 排序第 1次:[6, 0, -5, 7, 1, 3, 2, 8]
    		 * 排序第 2次:[0, -5, 6, 1, 3, 2, 7, 8]
    		 * 排序第 3次:[-5, 0, 1, 3, 2, 6, 7, 8]
    		 * 排序第 4次:[-5, 0, 1, 2, 3, 6, 7, 8]
    		 * 排序第 5次:[-5, 0, 1, 2, 3, 6, 7, 8]
    		 * 排序第 6次:[-5, 0, 1, 2, 3, 6, 7, 8]
    		 * 排序第 7次:[-5, 0, 1, 2, 3, 6, 7, 8]
    		 */
    		boolean flag = false;
    		//总共遍历多少次
    		for (int i = 0; i < arr.length - 1; i++) {
    			//每次遍历都把当次的最大值放在最后
    			for (int j = 0; j < arr.length - 1 - i; j++) {
    				if(arr[j] > arr[j + 1]){
    					flag = true;
    					temp = arr[j];
    					arr[j] = arr[j + 1];
    					arr[j + 1] = temp;
    				}
    			}
    			if(!flag){
    				break;
    			}else{
    				flag = false;
    			}
    			System.out.println("排序第 " + (i + 1) + "次:" + Arrays.toString(arr));
    		}
    	}
    }
    

    结果

    排序前:[6, 7, 0, -5, 8, 1, 3, 2]
    排序第 1次:[6, 0, -5, 7, 1, 3, 2, 8]
    排序第 2次:[0, -5, 6, 1, 3, 2, 7, 8]
    排序第 3次:[-5, 0, 1, 3, 2, 6, 7, 8]
    排序第 4次:[-5, 0, 1, 2, 3, 6, 7, 8]
    排序后:[-5, 0, 1, 2, 3, 6, 7, 8]
    

    性能测试(8万个随机数)大约花费11秒

    		int[] arr = new int[80000];
    		for (int i = 0; i < arr.length; i++) {
    			//生成一个【0,8000000】的数
    			arr[i] = (int)(Math.random() * 8000000);
    		}
    		
    		long start = System.currentTimeMillis();
    		bubbleSort(arr);
    		long end = System.currentTimeMillis();
    		System.out.println("总共花费:" + (end - start)/ 1000);
    
  • 相关阅读:
    My SqL 常用命令
    RGB颜色查询对照表
    Android 对话框(Dialog)大全
    【转】Android一些知识点汇总
    Google Maps API v2密钥申请
    蓝牙中文API文档
    IOS 电商类app 第一版架构 改进
    ios 开发小记 (四)
    ios 深度复制 copy & mutablecopy
    CCS绘制成的三角形箭头
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/15250262.html
Copyright © 2020-2023  润新知