1、前言
排序是數據處理中經常運用的一種重要運算,排序的功能是將一個數據元素(記錄)的任意序列,重新排列成一個按照一個規則有序的序列。常用的排序算法我們要熟練掌握。
2、冒泡排序
冒泡排序(英語:Bubble Sort)是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。
示例:
3、選擇排序
選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
示例:
4、插入排序
插入排序(英語:Insertion Sort)是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。插入排序在實現上,通常采用in-place排序,因而在從后向前掃描過程中,需要反復把已排序元素逐步向后挪位,為最新元素提供插入空間。
示例:
5、希爾排序
希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序算法。
希爾排序是基于插入排序的以下兩點性質而提出改進方法的:
插入排序在對幾乎已經排好序的數據操作時,效率高,即可以達到線性排序的效率
但插入排序一般來說是低效的,因為插入排序每次只能將數據移動一位
希爾排序先將待排記錄序列分割成為若干子序列分別進行插入排序,待整個序列中的記錄"基本有序"時,再對全體記錄進行一次直接插入排序。
示例:
6、歸并排序
歸并排序應用的是分治的思想,將大隊列劃分成小隊列,然后小隊列內排序,再將排好序的小隊列組合成大隊列,步驟:
1、將劃分成兩個隊列直到不可再分為止
2、小隊列內排序
3、左隊列與右隊列合并
4、返回合并的隊列
示例:
7、快速排序
快速排序的基本思想是:通過一趟排序將待排記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小,則可分別對這兩部分記錄繼續進行排序,已達到整個序列有序。一趟快速排序的具體過程可描述為:從待排序列中任意選取一個記錄(通常選取第一個記錄)作為基準值,然后將記錄中關鍵字比它小的記錄都安置在它的位置之前,將記錄中關鍵字比它大的記錄都安置在它的位置之后。這樣,以該基準值為分界線,將待排序列分成的兩個子序列。
一趟快速排序的具體做法為:設置兩個指針low和high分別指向待排序列的開始和結尾,記錄下基準值baseval(待排序列的第一個記錄),然后先從high所指的位置向前搜索直到找到一個小于baseval的記錄并互相交換,接著從low所指向的位置向后搜索直到找到一個大于baseval的記錄并互相交換,重復這兩個步驟直到low=high為止
示例:
審核編輯:劉清
-
算法
+關注
關注
23文章
4631瀏覽量
93432 -
指針
+關注
關注
1文章
482瀏覽量
70614 -
數據處理
+關注
關注
0文章
616瀏覽量
28654
發布評論請先 登錄
相關推薦
詳解Linux sort命令之掌握排序技巧與實用案例
TimSort:一個在標準函數庫中廣泛使用的排序算法
高薪 mcu 觸控算法專家(觸控按鍵,不要觸控屏)
【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+內容簡介
【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+介紹基礎硬件算法模塊
物聯網學習路線來啦!
時間復雜度為 O(n^2) 的排序算法
![時間復雜度為 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>](https://file1.elecfans.com//web2/M00/0A/90/wKgaomcQeFWAejYVAAF0WDlfIVY746.jpg)
名單公布!【書籍評測活動NO.46】從算法到電路 | 數字芯片算法的電路實現
常用的ADC濾波算法有哪些
常用的電機控制算法有哪些
FPGA實現雙調排序算法的探索與實踐
![FPGA實現雙調<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索與實踐](https://file1.elecfans.com/web2/M00/C4/41/wKgZomXyWEeAaEKTAAAJZpFnz-M952.jpg)
C語言實現經典排序算法概覽
![C語言實現經典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概覽](https://file1.elecfans.com/web2/M00/C0/E7/wKgZomXawtuAf2KKAAAG6CrgNgg468.gif)
評論