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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

冒泡排序 (?Bubble Sort?)

冒泡排序,正如它的名字一樣,未排序數組中的最大(小)值會依次往上浮。冒泡排序主要有兩個基本步驟:相鄰元素之間的比較 和 交換位置。

步驟分析:

令待排序序列為 data,規模為 n ,按照升序進行排序,則冒泡排序的步驟可以總結為:

  1. 從第一個元素開始,在兩相鄰元素之間進行比較,如果前一個元素 大于 后一個元素,則交換位置,否則 沒有操作。

  2. 然后比較第二個元素 和 第三個元素。如果第二個元素 大于 第三個元素,則交換位置,否則 沒有操作。

  3. 一直比較到第 n-1 和第 n 個元素( n為待找出最大數字的序列的規模 ),找出這 data[0] 到 data[n-1] 這 n 個數據中最大的數字。此時,最大的數字會被放在 data[n-1] 的位置,即最后面。

  4. 重復步驟 1 到 步驟 3 ,一直比較到待找出最大數字的序列的規模為 1 ,因為只剩一個元素,所以就不用比較了。

如下圖,該數據序列 data 一共有5個元素,他們為 [ 5, 3, 4, 1, 2 ] ,下圖給出了找出 data 序列中最大數字 5 的冒泡過程。

代碼( C++ ):

class Solution {public:    vector sortArray(vector& nums) {        int size = nums.size();        if(size<=1)return nums;        // 外層循環可以看做 1. 冒泡排序的趟數(一共比較 size-1 趟) 2. 浮起的第 i 個最大的數字        for(int i=1; i            bool flg = true; // 記錄待排序數組是否有序,有序為 true,            // 每次都從第一個元素開始,比較相鄰的兩個元素,找出未排序數組中的最大值,一直到            for(int j=0; j                if(nums[j]>nums[j+1]){ // 觸發交換的條件                    int tmp = nums[j+1];                    nums[j+1] = nums[j];                    nums[j] = tmp;                    flg = false; // 如果待排序數組發生交換,則說明是無序的                }            }            if(flg) break;        }        return nums;    }};

本段代碼多了一個標志變量 flgflg 是用來標記剩下的序列中有沒有發生交換的,如果沒有發生交換,說明剩下的序列是有序的,就不需要再傻傻地都比較一遍了,可以提前結束排序。

分析:

時間復雜度、空間復雜度、穩定性三個方面對冒泡排序進行分析。

時間復雜度

最好時間復雜度:當待排序列已經是有序的,我們只需要一次冒泡操作就可以退出排序流程,因此最好時間復雜度為 O(n)。

最壞時間復雜度:當待排序列是倒序時,需要進行 n-1 次冒泡排序,因此最壞時間復雜度為 O(n2)。

空間復雜度

冒泡排序只有在交換的時候會申請內存輔助交換操作,所申請的內存空間大小是常量級的,與數據規模 n 無關,因此空間復雜度為 O(1)。冒泡排序算法為就地排序。

穩定性

當兩相鄰元素大小相等時,不會觸發交換操作,他們的相對位置也不會發生變化。因此,冒泡排序算法是穩定的。

總結

以上是生活随笔為你收集整理的排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)的全部內容,希望文章能夠幫你解決所遇到的問題。

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