演算法基礎--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在最終排列好的資料列中的位置就確定了。
演算法演示過程如下: