常見的排序演算法

2022-04-30 23:15:24 字數 1290 閱讀 6176

1.基本概念

1.1 穩定排序和不穩定排序

穩定排序是所有相等的數經過某種排序方法後,仍能保持它們在排序之前的相對次序。反之,就是不穩定排序。

比如:一組數字排序前是 a1,a2,a3,a4 其中 a2 和 a3 相等,經過某種排序後為 a4,a2,a3,a1 則稱這種排序是穩定的,因為 a2 排序前在 a3 的前面,排序後還是在 a3 的前面。如果變成 a4,a3,a2,a1 就是不穩定的。

1.2 內排序和外排序

在排序過程中,所有需要排序的數都在記憶體,並在記憶體中調整它們的儲存順序,稱為內排序;在排序過程中,只有部分數被調入記憶體,完成後再從外存調入資料進行排序,稱為外排序,適用於資料很大不能一次調入記憶體。

內排序的常用演算法有:氣泡排序、選擇排序、插入排序、堆排序、快速排序

1.3 演算法的時間複雜度和空間複雜度

1) 時間複雜度

乙個問題的規模是n,解這一問題的某一演算法所重複執行的次數為t(n),當n不斷變化時,t(n)也會不斷變化。但有時想知道它變化時呈現什麼規律。為此,引入時間複雜度概念。

一般情況下,演算法中操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n))為演算法的漸進時間複雜度,簡稱時間複雜度。

記作: t(n) = o(f(n))

以氣泡排序演算法為例:

氣泡排序演算法重複執行的次數是:1 + 2 + 3 ... + (n-1) = n * (n-1) * 1/2

n * (n-1) * 1/2 <= n * n * 1/2

t(n) = n * (n-1) * 1/2

f(n) = n * n

當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數

t(n)/f(n) = 1/2

記作: t(n) = o(n*n)

氣泡排序演算法的時間複雜度為 o(n*n)。

2) 空間複雜度

與時間複雜度類似,空間複雜度是指演算法在計算機內執行時所需儲存空間的度量。

記作: s(n) = o(f(n))

2.常見的排序演算法

2.1 氣泡排序

2.2 選擇排序

2.3 插入排序

2.4 堆排序

2.5 歸併排序

2.6 快速排序

2.7 希爾排序

常見的排序演算法

一 氣泡排序 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...

常見的排序演算法

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