冒泡排序及優化
阿新 • • 發佈:2019-04-04
pro ima 循環 author sha 是否 ffffff string als 思路
代碼
package com.zgz; /** * 冒泡排序 * 優化思路: * 1. 引入標誌位,判斷數列是否有序,若有序則跳出不執行剩下的幾輪循環 * 2. 界定數列有序區(3,4,2,1,5,6,7,8), 記錄最後一次交換的位置,更新無序數列的邊界 * @author guozhenZhao * @date 2019年4月4日 */ public class BubbleSort { public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,8,9,5,0}; sort(arr); print(arr); } static void sort(int[] arr) { //最好時間復雜度O(n) for(int i=0; i<arr.length; i++) { //標誌位,如果上一輪冒泡排序已經全部有序,則減少循環次數 Boolean isSorted = true; //無序數列的邊界 int sortBorder = arr.length-1; //最後一次交換的位置 int lastChangePos = 0; for(int j=0; j<arr.length-1-i; j++) { if(arr[j]>arr[j+1]) { swap(arr, j, j+1); //進行了排序,說明元素無序 isSorted = false; //記錄元素交換的位置 lastChangePos = j; } } //把無序數列的邊界更新為最後一次交換元素的位置 sortBorder = lastChangePos; if(isSorted) { break; } } } static void swap(int[] arr, int i, int j) { int temp = arr[j]; arr[j] = arr[i]; arr[i]= temp; } static void print(int[] arr) { for(int i=0; i<arr.length; i++) { System.out.print(arr[i]+" "); } System.out.println(); } }
冒泡排序及優化