問題:
給定一個整型陣列, 實作冒泡排序 (升序排序)
一般我們寫出來的是這個代碼:
public static void bubbleSort(int[] array) {
for(int i = 0;i < array.length -1;i++) {
if(array[i] > array[i+1]) {
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
public static void main(String[] args) {
int[] array = {6,8,13,2,9};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
這個代碼呢,不能說他錯,但是呢大家都會寫,在面試的時候就體現不出來自己的優勢,所以我們需要對這個代碼進行優化:
1、第一輪的判斷將整個陣列的最大值放在了最后面,第二輪的判斷是將除過第一次選出的最大值以外的剩余數字中的最大值放在了倒數第二位,我們已經知道從后往前是從大到小的順序已經排好,所以我們沒必要每次都進行最后一個數字和前一個數字的比較,我們可以再加個回圈,用來減少判斷每次后面已經排好的順序,只進行前面數字的比較排序即可,


第3趟:

第4趟:

2、我們需要判斷陣列是否已經排好序,防止重復比較
分為兩種:一就是給定的陣列本身就是有序的,二就是陣列在排序的程序中就已排好
下面給出我們優化后的代碼:
public static void bubbleSort(int[] array) {
for(int i = 0;i < array.length -1;i++) {
boolean flg = true;//標記
for (int j = 0; j < array.length-1-i; j++){
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flg = false;
}
}
if(flg == true) {
break; // 說明給定的陣列是排好序的陣列
}
}
}
public static void main(String[] args) {
int[] array = {6,8,13,2,9};
bubbleSort(array);
System.out.println(Arrays.toString(array));
}
運行結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/150190.html
標籤:其他
上一篇:求一個人臉識別專案思路
