1. 程式人生 > >Python四大流行排序演算法詳解--快速排序-氣泡排序-選擇排序-插入排序。

Python四大流行排序演算法詳解--快速排序-氣泡排序-選擇排序-插入排序。

就作者而言使用Python經常用到的排序演算法就是快速排序、氣泡排序、選擇排序以及插入排序

      就時間複雜度而言,快速排序是高階排序,查詢快速,時間複雜度為nlgn

     而氣泡排序、選擇排序、插入排序則是比較低階的查詢演算法,時間複雜度為n**2

下面我們來看快速排序:

快速排序的思想是:

首先任意選取一個數據(通常選用陣列的第一個數)作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。
時間複雜度:O(nlgn)

解析: 

       首先介紹運用的技術:遞迴函式、列表生成式

       1.首先向函式中傳入一個要排序的列表

       2.判斷列表中的資料,如果是一個空列表或者列表中只有一個元素則返回原列表

       3.然後應用列表生成式生成符合條件的(先隨機生成一個數,判斷列表中大於這個數的借用列表生成式生成小列表,繼續放到函式中遞迴,直到分成只有兩數比較之後的小列表)列表,然後拼接到一塊形成一個完整的列表返回

下面來看氣泡排序

氣泡排序是基礎的排序方法,相信只要是計算機專業的學生都學過這個氣泡排序,現在我就再聊聊吧

先來聊聊氣泡排序的思想吧

氣泡排序其實就是兩兩比對,即第一個和第二個比,第二個和第三個比......如果前面的比後面的大就交換位置。這樣一輪比對下來最大的數就會排到最後面了,然後第二輪、第三輪......對比到最後最小的數就會排到最前面.....

下面來看看程式碼:

程式碼解析:

    1.第一個for迴圈控制的是對比多少輪,因為大最後一輪的時候其實都已經排序完畢了,不需要再排了,所以只需要排len(List)-1次。

    2.第二個for迴圈控制的是兩兩對比的次數,因為第一行固定要對比len(List)-1次,而第二次的時候最後一個已經固定為最大,所以第二次只需要對比len(List)-1-1次,同理第三次為len(List)-1-2次......

    3. 然後對控制對比次數的j迴圈進行對比。如果前面的大於後面則進行交,最後的到排序完成的列表,但是運算複雜,時間複雜度高

再來聊聊選擇排序

其實選擇排序和氣泡排序很相似,時間複雜度相同。只是選擇排序是定死第一個數,用這個數與剩餘的每個數進行對比,這樣最後就會得到最小的數房子第一個位置,第二輪定死為第二個,與剩下的再進行對比.....最後最大的就會放到最後,排序完成

用專業術語就是:

選擇排序比較好理解,好像是在一堆大小不一的球中進行選擇(以從小到大,先選最小球為例):

  1. 選擇一個基準球

  2. 將基準球和餘下的球進行一一比較,如果比基準球小,則進行交換

  3. 第一輪過後獲得最小的球

  4. 在挑一個基準球,執行相同的動作得到次小的球

  5. 繼續執行4,直到排序好

時間複雜度:O(n^2).  需要進行的比較次數為第一輪 n-1,n-2....1, 總的比較次數為 n*(n-1)/2

下面來看看程式碼實現:

程式碼解析:

      1.第一個for迴圈仍然控制進行對比的輪數,到最後一組的時候其實以及排序完成,所有不用再來一輪,最後的對比輪數為len(List)-1

      2. 第二個for迴圈是控制對比的次數,由於每次定死一個,而且第一輪第一個固定最小,第二輪第一個第二個固定......所有對比的區間應該定為[i+1, len(List)-1]

      3.因為每次對比都是定死前面的,第一輪定死第一個,第二輪第二個與後面對比,第三輪第三個......,所以應該定死輪數i代表的那個數,與後面每個j進行對比。即判斷 List[i]是否大於List[j],然後進行交換

最後我們再來聊聊插入排序演算法

插入排序演算法和冒泡、選擇排序相同,都是低階演算法,時間複雜度相同,都很高

插入排序原理很簡單,和氣泡排序極為相似,不過它是從後面向前對比,它所插入的必須是一個有序的,它與它前面的所有數一個一個的對比,知道找到比他小的就停止對比

有一個已經有序的資料序列,要求在這個已經排好的資料序列中插入一個數,但要求插入後此資料序列仍然有序 
基本思想為:每步將一個待排序的紀錄,按其關鍵碼值的大小插入前面已經排序的檔案中適當位置上,直到全部插入完為止。 
插入排序就是用一個數與一個已排好序的序列進行比對,從右向左進行。 
例:5與3進行比較,5>3,將5與3不進行交換。l=[3,5], 
此時再進行排序。4 < 5 l=[3,4,5] 3<4不進行交換,l=[3,4,5] 

來看看實現程式碼把:

程式碼解析:

      1. 第一個迴圈仍然是判斷對比的輪數

      2. 第二個for迴圈是形成第一個迴圈數為基準形成的反序列表,如當i=5時,形成列表[5, 4, 3, 2, 1],然後用來判斷對比的次數

      3. 然後用當前的數與前一個數進行對比,如果小於前一個數的話就進行交換,如果找到前一個數比自己小就停止交換

以上就是作者對四大常用排序演算法的總結,如果對大家有用的話點個贊哦!!!