Java基礎學習:陣列08(氣泡排序:必須掌握)
阿新 • • 發佈:2022-03-06
-
氣泡排序:
-
氣泡排序無疑是最為出名的排序演算法之一,總共有8大排序;
-
冒泡的程式碼還是相當簡單的,2曾迴圈,外層冒泡輪數,裡層依次比較,江湖中人盡皆知;
-
我們看到巢狀迴圈,應該立馬就可以得出這個演算法的時間複雜度為O(n2)
-
-
程式碼例子:
public class ArrayDemo07 {
public static void main(String[] args) {
//氣泡排序:必會
int[] arr={1,5,3,7,9,4};
int[] arr1=sort(arr);
System.out.println(Arrays.toString(arr1));
}
//氣泡排序
/**
* 核心思路:
*
* 1,比較陣列中,相鄰的2個數組元素;如果第一個數比第二個數大,我們就交換他們的位置;
* 2,每一次比較,都會產生出一個最大,或者最小的數;
* 3,下一輪則, 可以少一次排序;
* 4,依次迴圈,直到結束;
*/
public static int[] sort(int[] array){
//臨時變數:負責交換資料
int temp=0;
//外層迴圈:判斷我們這個要走多少次
for (int i = 0; i < array.length-1; i++) {
//內層迴圈,比較2個數,如果第一個數比第二個數大,我們就交換他們的位置
for (int j = 0; j < array.length-1-i; j++) {
if(array[j]>array[j+1]){
temp=array[j+1];
array[j+1]=array[j];
array[j]=temp;
}
}
}
return array;
}
}
-
思考:如何優化?
-
優化程式碼:
public class ArrayDemo07 {
public static void main(String[] args) {
//氣泡排序:必會
int[] arr={1,5,3,7,9,4};
int[] arr1=sort(arr);
System.out.println(Arrays.toString(arr1));
}
//氣泡排序
/**
* 核心思路:
*
* 1,比較陣列中,相鄰的2個數組元素;如果第一個數比第二個數大,我們就交換他們的位置;
* 2,每一次比較,都會產生出一個最大,或者最小的數;
* 3,下一輪則, 可以少一次排序;
* 4,依次迴圈,直到結束;
*/
public static int[] sort(int[] array){
//臨時變數:負責交換資料
int temp=0;
//外層迴圈:判斷我們這個要走多少次
for (int i = 0; i < array.length-1; i++) {
boolean flag=false;//通過flag標識位減少沒有意義的比較
//內層迴圈,比較2個數,如果第一個數比第二個數大,我們就交換他們的位置
for (int j = 0; j < array.length-1-i; j++) {
if(array[j]>array[j+1]){
temp=array[j+1];
array[j+1]=array[j];
array[j]=temp;
flag=true;
}
}
if(flag==false){//這一輪沒有進行比較
break;
}
}
return array;
}
}
-
-
筆記:
-