Java实现冒泡排序及其优化
生活随笔
收集整理的這篇文章主要介紹了
Java实现冒泡排序及其优化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
冒泡排序(Bubble Sort):從左至右(從下標較小的元素開始)依次比較相鄰元素的值,若發現逆序則交換,使較大的元素逐漸從前移向后部。
冒泡排序的規則(以數組 arr= {3, 9, -1, 10, 20}為例):
1.一共進行數組的大小 - 1 (arr.length? - 1) 次的大循環(趟數);
2.每一趟(每一次大循環)排序的次數逐漸減少:第一趟下來后,最大的數已經確定下來(在數組的最后),因此第二趟較第一趟排序對比的次數少;
3.優化方案:如果我們發現在某趟排序中,沒有發生過一次交換,則可以提前結束冒泡排序。可在排序過程中設置一個標識(flag),用于判斷元素是否進行過交換。
Java實現如下所示:
import java.util.Arrays;public class BubbleSort {public static void main(String[] args){int[] arr = {3, 9, -1, 10, 20};; //{3, -1, 9, 10, 20};//{3, 9, -1, 10, 20};bubbleSort(arr);//System.out.println(Arrays.toString(arr));}//冒泡排序算法public static void bubbleSort(int[] arr){int temp = 0;boolean flag = false; //標識變量,標識冒泡過程中是否進行過交換//冒泡排序的時間復雜度為 O(n^2)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;}}System.out.println("第" + (i+1) + "趟排序: " + Arrays.toString(arr));if(flag == false){ //在一趟排序中,一次位置交換都沒有發生過break;}else{flag = false; //重置flag 進行下趟判斷,如果不重置flag,則flag為true后,則無法跳出循環,優化就無從談起}}}}特別要注意的是 flag 在不等于false時,要重置其為false,從而進行下次判斷,如果不重置flag,則flag為true后,則無法跳出循環,優化就無從談起
總結
以上是生活随笔為你收集整理的Java实现冒泡排序及其优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现八皇后问题的解法(一维数组版
- 下一篇: Java实现选择排序及其优化