常見的排序演算法

2021-09-23 17:16:56 字數 1329 閱讀 9255

插入排序

插入排序是一種較為簡單的排序演算法,它的基本思想是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。

形象的可以理解為打撲克抓拍的過程,通常我們右手抓牌,沒抓一張牌,就放到左手,抓下一張牌後,會把這張牌依次與左手上的牌比較,並把它插入到乙個合適的位置(按牌面大小)。

希爾排序(shell)

希爾排序是對直接插入排序的一種優化,實質就是把直接插入排序改為了分組插入排序。其基本思想就是將整個待排序元素序列按gap(步長)分割為n個組,對每個組進行直接插入排序,然後在減小gap(步長)再進行直接插入排序,直到gap達到最小時,即陣列基本達到有序時,再對陣列進行直接插入排序,此時直接插入排序就可以達到最高效率。

選擇排序

選擇排序的排序思想就和它的名字一樣,每次通過從無序的陣列中選擇出乙個最小的(要求公升序排列)數把他放到陣列的最前面。再依次找次小的數字放到陣列無序區的最前。直到陣列為有序。

堆排序

堆排序(使用大堆,公升序)從基本實現原理來說也是一種選擇排序,它同樣是確定了位置選擇符合位置的元素,但是堆排序是更加優化的選擇排序的版本,它利用了堆的特性。父結點的值大於子結點,且滿足完全二叉樹,大大提高了選擇排序的效率。

氣泡排序

氣泡排序(這裡指公升序)是一種非常簡單直觀的排序方式,它是一種交換式的排序方法,基本思想就是相近的兩個數字作比較,小的放到前面,大的放後面,按照這個規則從頭向後比較,最大的數就被換到了陣列尾。

快速排序

快速排序是一種在實際應用中經常用到的排序演算法,它的應用場景是大規模的資料排序,並且實際效能要好於歸併排序。它的基本原理是從陣列中選取乙個元素,把所有大於這個元素的數都放到它的後面,所有小於這個元素的數都放到它的前面,然後這個元素就把原陣列切分成了兩個部分,再分別對這個兩個部分進行同樣的操作,直到陣列不能再切分的時候,此時陣列為有序。

歸併排序

「歸併」的含義是將兩個或兩個以上的有序表組合成乙個新的有序表,歸併排序和快排一樣也採用的是分治的思想,它的基本原理是通過對若干個有序結點序列的合併為乙個有序序列來實現排序的。

基數排序

基數排序(公升序)是一種非比較式的排序方式,和之前博文中提到的快排,氣泡排序,插入排序這些排序演算法不一樣,它沒有使用任何交換的方式,它的基本思想是通過分配的方法把元素從小到大分配,以到達排序的作用。

常見的排序演算法

一 氣泡排序 include include void swap int a,int b void bubblesort int arr,int size int main void bubblesort a,5 for int i 0 i 5 i cout 二 選擇排序 void selectio...

常見的排序演算法

需要包含的標頭檔案 include stdafx.h include include include 氣泡排序是穩定排序 時間複雜度 o n 2 void swap int a,int b void bubblesort int a,int n void printnum int a,int n a...

常見的排序演算法

排序演算法是最基礎,也是最簡單的演算法思想,因為應用場景多,書寫簡單,所以應用較為普遍,所以在面試和考試的時候,都會涉及到排序演算法,雖然排序演算法種類很多,但是只要理解了思想,然後靈活運用,那麼就不難記憶.排序演算法兩個需要記憶和理解的點就是 演算法思想和時間複雜度.下面我們就介紹和分析一下常見的...