冒泡排序算法代码实现
上代码:
package com.liu.pro; import java.util.Arrays; public class bubbleSort { public static void main(String[] args) { int[] arr = {9,8,5,6,2,7,1,3,4}; sort(arr); System.out.println("最初的冒泡排序算法"); System.out.println(Arrays.toString(arr)); sort1(arr); System.out.println("优化后的冒泡排序算法"); System.out.println(Arrays.toString(arr)); } /** * 最初的冒泡排序算法 * @param arr 传入的数组 */ public static void sort(int[] arr){ // 有arr.length个数,只需要排序arr.length-1次,最后一个只有一个数,则不需要进行排序 for (int i = 0; i < arr.length - 1; i++) { // 从索引为0的数开始进行排序,第i轮时,已经有i个数已经排好了,arr.length - 1 (代表最大的下标)- i(已经排好的数) for (int j = 0; j < arr.length - 1 - i; j++) { // 前面的数值比后面的数值大 if (arr[j] > arr[j + 1]){ // 交换数值 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j+1] = temp; } } } } /** * 优化后的冒泡排序算法 * @param arr 传入的数组 */ public static void sort1(int[] arr){ // 利用flag进行记录是否进行了更换 Boolean flag = false; // 两层for循环的解释和上同 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]){ int temp = arr[j]; arr[j] = arr[j + 1]; arr[j+1] = temp; // 此轮已经进行值交换 flag = true; } } // flag为true时,证明此轮已经进行过值的交换,需要进行排序 // 否则证明此轮没有进行值交换,大小则全部符合规则,那么直接退出,后面的都已经排好了 if (flag){ flag = false; }else{ break; } } } }
结果: