排序演算法總結一

2021-07-27 02:18:52 字數 2132 閱讀 2969

排序在演算法中是比較基礎也是相當重要的一部分,在這裡將會把各種排序演算法那加以總結,並實現;

桶排序 (穩定,時間o(

nlogn))

計數排序 (穩定,時間o(

kn) )

基數排序

堆排序 (穩定,時間o(

nlogn))

註解:一般說快速排序是不穩定的, 但事實上快速排序有穩定的實現方法,故在這裡認為快排也是穩定的

接下來會按照以下思路去分析每種排序演算法:

大家也可以到這個**上找對應排序的視覺化理解各種排序演算法的邏輯;

相鄰兩個元素進行比較然後交換;

在實現中,是以函式模板的形勢實現的;利用vector儲存陣列;為了方便列印每個迴圈中nums中的狀態,呼叫了algorithm庫裡面的for_each函式;為了直接使用本文中的**,需要包含的標頭檔案有

#include 

#include

#include

其他的排序演算法也是如此,後面就不在重述;

template

void bubblesort(vector

&nums) );

cout

<< endl;

for(size_t j = 1; j + i < nums.size(); j++)

if(nums[j-1] > nums[j]) // keep stable

swap(nums[j-1],nums[j]);

}}

第5行**主要是為了方便列印每次迴圈後,陣列裡面的元素變化的狀態,真正實現的時候,可以刪掉這一行**;第8行中,要注意符號,這個將會與排序演算法是否穩定有一定關係

為了測試氣泡排序,主函式**如下:

int main()

; bubblesort(nums);

for_each(nums.begin(),nums.end(),(const

int num) );

return

0;}

當測試其他排序演算法的時候,只需要修改第3行呼叫排序演算法的修改或者修改nums陣列裡面額資料即可;

測試結果:

8 10 5 7 11 9 6 2

8 5 7 10 9 6 2 11

5 7 8 9 6 2 10 11

5 7 8 6 2 9 10 11

5 7 6 2 8 9 10 11

5 6 2 7 8 9 10 11

5 2 6 7 8 9 10 11

2 5 6 7 8 9 10 11

2 5 6 7 8 9 10 11

每次選擇最大(小)的元素放在陣列的最後面(最前面)

找出a[1..n]中最小的元素,與a1交換;

找出a[2..n]中最小的元素 ,與a2交換;

重複以上的步驟,直到排序完成;

template

void selectionsort(vector

&nums)

swap(nums[i],nums[index]);

}}

像打撲克牌一樣,將每一張牌按照大小插入到相應的位置

已經排好序的序列a0

,a1,

ai−1

,逆序查詢ai

的合適位置

j 將j

位置及其後的元素依次後移,將ai

插入到位置j,組成新的排好序的序列a0

,a1.

..ai

重複1、2步驟,直到排好所有的元素

上述後面兩個步驟可以整合到一起,尋找合適位置的時候,同時完成元素的移動;

template

void insertionsort(vector

&nums)

nums[j+1] = key;

}}

**第6行while迴圈就是在尋找元素key對應的位置,如果位置不對,就把元素後移一位(第7行),j遞減之後繼續迴圈,直到找到對應的位置,此時將key放在對應的位置;

常見排序演算法總結(一)

這裡的排序演算法指內排序演算法,即在記憶體中排序 所謂排序為部分有序到全域性有序的過程,以下排序都以從小到大為例 1.直接插入排序 思想 好像打撲克牌一樣,尋找正確的位置插入,分三步走。一 尋找合適的位置。二 將後面的數往後移一位,騰出空間。三 插入 public class insortdemo ...

排序演算法總結篇(一)

前言 在學習過程中,演算法是我們繞不過去的檻,可能我們沒有特體經過系統的學習,但是,實際上平時的 中已經體現了很多的演算法思想,以中興演算法大賽2017年中興演算法大賽 迪傑特斯拉派為列,裡面自己其實用到了很多演算法,只是自己並沒有將它與理論結合起來看。1.概述 首先,我們來看一張經典的圖,這張圖很...

JS排序演算法總結 (一)氣泡排序

目的 掌握氣泡排序的基本思想與過程 實現 時間複雜度與優化 1 基本思想與過程 從後向前兩兩比教,大數下沉,小數冒泡,一輪比較後,最小數的位置就排好了,在第乙個位置。重複上述過程,依次將第2.3.n 1個最小數排好位置。2 實現 function bubblesort arr console.log...