日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

冒泡排序 小白学demo_day2

發布時間:2024/8/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 冒泡排序 小白学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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。