1. 程式人生 > >演算法基礎--05

演算法基礎--05

時間很快,今天已經是2018年10月份的最後一天了,那麼我們今天這篇博文介紹的則是演算法中一些經典的排序演算法。有興趣的朋友,可以來觀望觀望,求圍觀。

好,下面我們開始正題部分。

第五章 排序演算法

因為計算機可以進行高速的計算處理,所以非常擅長對大量資料按照一定的規則正確排序處理。

5.1 排列資料

排序是指對多個數據排序的順序。

排序:按照某種事物的屬性資料,為多個事務整理順序的處理叫做排序。

排序的順序:

       升序:從小到大的順序

       降序:從大到小的順序

5.2 排序演算法

介紹幾種經典的排序演算法

1.桶排序

準備與待排序陣列取數範圍相同大小個數的木桶,利用這些木桶對資料進行儲存排序。

2.選擇排序

遍歷資料,把資料中的最大值(或者最小值)與起始(或者末尾)資料進行交換

3.交換排序(氣泡排序)

對比相鄰的兩個資料,根據大小關係調整兩個資料的順序。

4.插入排序

把目標資料按照正確的大小順序插入到相應的位置中。

5.希爾排序

把目標資料按照一定的個數分成幾個區域 進行插入排序

6.歸併排序

把目標資料分割成更小的部分進行排序,更小的部分正確排序之後再合併起來

7.快速排序

從目標資料中任意選取一個數據,以這個資料的值為分割點,把目標資料分割為兩個部分。這樣迴圈操作下去進行排序。

5.3 桶排序

最簡單的排序演算法之一。

首先需要準備“待排序資料”的“取值範圍的個數”的木桶陣列。這樣,每個待排序資料都對應一個木桶的標號(陣列下標)。我們從木桶的起始元素開始進行順序處理,如果木桶下標對應一個待排序的資料,把這個資料按照出現次數取出來,就是排列好的資料了。

具體過程如下:

適用於資料取值範圍較小的場合。

5.4 選擇排序

每次找出一個最小(最大)值的排序演算法

最容易理解的演算法之一。

現實的場景如下:

思路如下:

準備儲存一個排序資料的陣列,把這個陣列分成“已排序的部分”和“待排序的部分”,一開始前者是空的,後者是整個陣列。

演算法例項過程如下:

5.5 氣泡排序

進行相鄰資料的交換的演算法

核心就是比較相鄰的兩個元素的大小關係。

資料分成待排序部分和已排序部分組成,在開始之前,前者為空,待排序部分則是整個陣列。

具體步驟如下:

演算法演示過程如下:

5.6 插入排序

向有序資料裡的正確位置插入資料的演算法。

假設資料列D,前i-1個數據是已排序部分,那麼把第i個數據按照大小關係插入到已排序的資料列中,依次完成排序的過程稱為插入排序。

具體過程如下:

演算法演示過程如下:

5.7 歸併

就是把“幾個已排序的數列”合併成“一個已排序的數列”的演算法。

演示過程如下:

5.8 歸併演算法

利用歸併進行排序的演算法稱為歸併排序,先分割再合併。

步驟1:把資料列分割成兩個部分。

把待排序的資料列平均分成兩個資料列,把得到的資料列也平均分為兩個資料列......不斷地重複下去,直到分割後得到的資料列只剩下一個元素。

步驟2:對分割後的資料列進行歸併。

把分割後得到的資料列不斷地和相鄰的資料進行歸併,直到最終歸併得到一個數據列

具體過程如下:

演算法演示過程如下:

 5.9 希爾排序

改進排序效率

分組進行排序

把資料按照一定的間隔分割成不同的組,並且對每個組進行排序。

雖然演算法稍微複雜,但是數值的交換處理更少,執行速度更快。

具體過程如下:

演算法演示過程如下:

5.10 快速排序

最快的排序演算法(言語有待於優化)

只需要最少的時間完成

思路:

       在快速排序中,首先我們從資料列中,任意選取一個數據P(基準數),接著我們把比P小的值和比P大的值分離出來,得到新的資料列。這樣一來P在最終排列好的資料列中的位置就確定了。

演算法演示過程如下:

專題5 把2的n階乘的值記下來