本文共 2030 字,大约阅读时间需要 6 分钟。
冒泡排序(BubbleSorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,
使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。
如果一趟比较下来没有进行过交换,就说明序列有序,
因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行) 代码实现:
package com.sukang.sort;import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;/** * @description: * @author: sukang * @date: 2020-07-07 9:42 */public class BubbleSort { public static void main(String[] args) { //创建要给80000个的随机的数组 int[] arr = new int[80000]; for (int i = 0; i < 80000; i++) { arr[i] = (int)(Math.random()*8000000);//生成一个[0,8000000)数 } //没排序之前数组遍历 System.out.println("排序前的数组" + Arrays.toString(arr)); Date data1=new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss"); String date1Str = simpleDateFormat.format(data1); System.out.println("排序前的时间是="+date1Str); bubbleSort(arr); Date data2 = new Date(); String date2Str = simpleDateFormat.format(data2); System.out.println("排序后的时间是="+date2Str); //排序之后数组遍历 System.out.println("排序后的数组" + Arrays.toString(arr)); } public static void bubbleSort(int[] arr){ //零时变量 int temp = 0; //设置一个标志,如果一次小的循环中没有一次交换数据,说明数组已经已经是顺序排序了,不用进行 //下面的循环了,这是对冒泡排序的优化 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; // 重置flag!!!, 进行下次判断 } } }}
转载地址:http://wonti.baihongyu.com/