昨天去面試,HR問我關於算法和數據結構的問題,結果連個冒泡排序我都給寫錯了,特意回來研究了下原理,免得以後又忘了;
首先定義一個n個數據的數組array[];
然後根據冒泡排序的基本思想:
1.相鄰的2個數相比較,按照從小到大的順序將數據排列出來;
2.n個數據,那麼就要依次排序,第一次是n-1次相鄰數比較,第二次是n-2次相鄰數比較,最多進行n-1趟排序,即可得到排序結果;
按照自己的理解,原理我也只能這樣描述了;
還是寫個代碼來說明下更好
public class PaiXu {
public static void main(String[] args) {
int[] arr = new int[] { 7, 4, 12, 0, 2};
int temp = 0;
for (int i = 0; i < arr.length-1; i++) {
System.out.println("i"+i);
for (int j = 0; j < arr.length-i-1; j++) {
System.out.println("j"+j);
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int k=0;k<arr.length;k++){
System.out.print("arr:"+arr[k]+" ");
}
}
}
上面定義了一個數組,arr.length爲5,不管arr.length爲多少,j的長度爲0,,1,2........arr.length-2;
說下排序的順序:
第一趟排序比較了4次,數組的結果爲:4,7,0,2,12;
第2趟比較了3次,數組的結果爲:4,0,2,7,12
第3趟比較2次,數組的結果爲:0,2,4,7,12;
因爲已經沒有要交換的值了,所以排序停止,根據上面的順序,可以知道冒泡排序就是每一次比較都是把比較的n-2個數據中最大數放在n,n-1...1上。
基本的原理就這樣了,不過該算法的執行效率並不高,根據它的時間複雜度:冒泡排序的最壞時間複雜度爲O(n2)。 算法的平均時間複雜度爲O(n2) 。冒泡排序最好的時間複雜度爲O(n)。 來看,這裏的執行效率顯然不好。
好了,今天記錄下來,以後不會再忘記了