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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

“365算法每日学计划”:05打卡-图解冒泡排序(多解法)

發布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “365算法每日学计划”:05打卡-图解冒泡排序(多解法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章有不當之處,歡迎指正,如果喜歡微信閱讀,你也可以關注我的微信公眾號:好好學java,獲取優質學習資源。

一、思路

在進行冒泡法排序(升序)時,需要將數組元素(len)兩兩比較,如果
前面的元素大于后面的元素,則交換兩個數,否則,比較下一個元素和它的下一個元素的大小,依次執行,執行一次循環,可以找到當前數組中最大的一個元素,然后問題規模變小,然后找出len-1個元素里的最大值,使之成為第二大元素,依次執行,需要在外層嵌套一層循環。

二、優化

考慮如果數組中的數據已經是排好序的,那么就不需要遍歷那么多次,定義一個標志位,如果沒有執行交換,則說明數組中的元素已經排好序了,這時直接跳出循環。

三、圖解

四、代碼實現

假如有幾個數字int score[] = {67, 69, 75, 88}; 按照從大到小排序。

有2種思路

第一種,score[j] 和 score[j+1] 比較 如果 前者比后者小,把前者和后者調換順序,兩兩調換后一輪下來 最小的會被排到最后去。每一輪j都從0開始,當i輪排序,就有最后面的i個數字因為他是最小的,所以后面的每輪都不用理他了,也就是 score.length-1-i 往后的數不用管了,如上,第一輪有4個數字 i為0 ,那么score.length-1-i 為3,也就是下標是3以后的可以不用管,3往后沒有數字,所以第一輪所有的數字都要參加比較,第二輪I=1 score.length-1-i 為2 也就是說 下標2后面的 下標為3的數字不用比了,因為兩兩比較厚,67會到 score[3],實現代碼如下:

for(int i =0;i < score.length - 1;i++) { for(int j = 0;j < score.length - 1-i;j++)// j開始等于0, { if(score[j] < score[j+1]) { int temp = score[j]; score[j] = score[j+1]; score[j+1] = temp; } } }

第二種思路,用88 和 75 比較,在和69 比較 在和 67 比較,發現88是最大的,吧他排到第一位(index=0的位置),然后i=1,也就是第二輪,就不用看下標為0的88了因為他是老大,然后接著比較。;

for(int i =0;i < score.length - 1;i++) { for(int j = (score.length - 2);j >= i;j--) { if(score[j] < score[j+1]) { int temp = score[j]; score[j] = score[j+1]; score[j+1] = temp; } } }

說明下j為啥=

(score.length - 2)

因為length=4,我最多能讓下標2和下標3的數字比較(j+1最大等于3),也就是4-2=2 j最大=2,2和2+1比較 然后1和2比較,然后 0和1 比較。

五、時間復雜度分析

最好的情況下時間復雜度為O(n):當待排序的數據已經按順序排好的情況下

最壞的情況下時間復雜度為O(n^2):因為要比較n-1趟,,每一趟又要比較(n-1-i)次

參考資料
  • https://blog.csdn.net/qq_34992845/article/details/53271184
  • https://blog.csdn.net/shuaizai88/article/details/73250615

總結

以上是生活随笔為你收集整理的“365算法每日学计划”:05打卡-图解冒泡排序(多解法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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