冒泡排序 小白学demo_day2
生活随笔
收集整理的這篇文章主要介紹了
冒泡排序 小白学demo_day2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
冒泡排序的過程:
重復地走訪要排序的元素,依次比計較兩個相鄰的元素,如果他們的順序錯誤就把他們交換過來。走訪元素的工作室重復地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。
簡單說,就是比較相鄰的兩個元素,將值大的元素交換到右邊
是否穩定
如果遇到相等的值不進行交換,那這種排序方式是穩定的排序方式,因此,冒泡排序是一種穩定排序算法
算法
N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,所以可以用雙重循環語句,外層控制循環多少趟,內層控制每一趟的循環次數
時間復雜度
1,如果我們的數據正序,只需要走一趟即可完成排序,所需的比較次數C和記錄移動次數M均達到最小值,即:C min=n-1; M min = 0;所以,最好的時間復雜度為O(n)
2,如果很不幸,我們的數據是反序的,則需要進行n-1趟排序,每趟排序要進行n-i次比較(1<=i<=n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值:
所以,最終的時間復雜度為:O(n^2)
冒泡排序的示例
[2 4 3 1 6 5] 初始狀態序列 [2 3 1 4 5][6] 第一次冒泡結束 [2 1 3 4][5 6] 第二次冒泡結束 [1 2 3][4 5 6] 第三次冒泡結束 [1 2][3 4 5 6] 第四次冒泡結束 [1 2 3 4 5 6] 第五次冒泡結束冒泡排序常規代碼
void bubble_sort(int[] arr,int len) {//一定要記住判斷邊界條件if(arr == null || len < 2) {return;}for(int i = 0;i < len-1; i++) {//第i趟比較for(int j = 0; j < len -1 -i; i++){//開始進行比較,如果前面值比后面值大,那就交換位置if (arr[j] > arr[j+1]) {int t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;}}}System.out.println("最終得到的數組是:")for (int k = 0; k< arr.length;k++) {System.out.println(arr[k]+"");} }如果,設置一個標志位,不再進行數據交換,說明已經排序完成,則無需再進行交換
冒泡排序的簡單優化代碼:
void bubble_sort(int[] arr) {if(arr == null || arr.length < 2) {return;}int flag = 0;for(int i = 0; i < arr.length; i++) {for( int j = 0; j < arr.length -1 -i; j++) {if(arr[j] > arr[j+1]) {int t = arr[j];arr[j] = arr[j+1];arr[j+1] = t;flag = 0; //發生交換,標志位置為0}}}System.out.println("第%d遍最終結果:",i+1);for(int count : list) {System.out.println(count);}System.out.println("");if (flag == 1) {return;} }總結
以上是生活随笔為你收集整理的冒泡排序 小白学demo_day2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 查找数组B中不在数组A中的元素
- 下一篇: 选择排序之小白学算法