zoukankan      html  css  js  c++  java
  • 冒泡排序(时间复杂度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);
    
  • 相关阅读:
    【Linux 内核网络协议栈源码剖析】数据包发送
    【Linux 内核网络协议栈源码剖析】connect 函数剖析(一)
    【Henu ACM Round#14 C】Duff and Weight Lifting
    【Henu ACM Round#14 B】Duff in Love
    【Henu ACM Round#14 A】Vitaly and Night
    【Henu ACM Round #13 E】Spy Syndrome 2
    【Henu ACM Round #13 F】Fibonacci-ish
    【Henu ACM Round #13 D】A Trivial Problem
    【Henu ACM Round #13 C】 Ebony and Ivory
    【Henu ACM Round #13 B】Spider Man
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/15250262.html
Copyright © 2011-2022 走看看