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