冒泡排序(时间复杂度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);
原文地址:https://www.cnblogs.com/kaka-qiqi/p/15250262.html