三、演算法效能:
二、七種排序演算法
資料結構之線性表對n個資料執行某種操作,使其按照某種規則有序的排列,這樣的操作就是排序。資料結構之鍊錶
資料結構之串
資料結構之圖
資料結構之排序演算法
內排序與外排序
按照排序過程中資料是否全放在記憶體中,可以分為內排序和外排序
交插選並
其中內排序又分為插入排序、交換排序、選擇排序、歸併排序,總結為交插選並。
時間效能:比較和移動的操作次數
輔助空間:演算法執行開闢的額外空間。
演算法複雜性:演算法本身的複雜度1、氣泡排序
演算法思想:假設有n個資料,依次比較相鄰兩個元素,如果反序則交換位置,直到沒有反序為止。
最好時間複雜度o(n)
最壞時間複雜度o(n2)
for
(int i =
0; i < length -
1; l++)}
}
2、選擇排序
演算法思想:假設有n個元素,每次在n-i+1個元素中選出最小的元素,並和第i個元素交換。
優點:交換次數少
時間複雜度o(n2),效能優於氣泡排序法。
3、直接插入排序
將乙個元素插入到有序表中。
時間複雜度o(n2),效能優於選擇排序演算法
基本有序和資料量較少時,效率很高。
4、希爾排序
5、堆排序(heap sort)
堆:堆是一棵完全二叉樹。如果每個結點不小於孩子結點的值,稱為大頂堆。如果每個結點不大於孩子結點的值,稱為小頂堆
\調整序列稱為乙個堆
輸出根結點元素,並調整剩餘元素成為乙個堆。
// 堆調整函式
void
heapadjust
(std::vector<
int>
& vec,
int begin,
int end)
if(vec[0]
>= vec[i]
) vec[begin]
= vec[i]
; vec[i]
= vec[0]
; begin = i;}}
// 堆排序函式
void
heapsort
(std::vector<
int>
& vec,
int size)
//調整堆結構
for(
int j = size; j >
0; j--)}
intmain
(int argc,
char
* ar**)
heapsort
(vec, vec.
size()
-1);
for(
int i =
0; i <
11; i++
)return0;
}
時間複雜度o(nlogn),效能優於前面的演算法。
初始化堆的時間複雜度為o(n),重建堆的時間複雜度為o(nlogn),總的時間複雜度為o(nlogn)。
6、歸併排序
時間複雜度:o(nlogn)
每一趟需要對n個元素遍歷,一共需要logn次遍歷,所以時間複雜度為o(nlogn)
空間複雜度:o(n + logn)
歸併排序需要同樣數量的記憶體空間儲存排序結果,以及logn大小的佔空間儲存臨時結果。
總的來說,歸併排序是一種占用記憶體較多,但是效率高且穩定的演算法。
7、 快速排序
csdn 公式編輯
《資料結構與演算法》之排序
資料結構與演算法 之鍊錶 資料結構與演算法 之鏈棧 資料結構與演算法 之佇列 資料結構與演算法 之二分查詢 資料結構與演算法 之二叉樹 如果你是一名程式設計師,或多或少你都了解過 聽說過排序。在專案中我們也會經常用到排序,排序非常重要,現在我在這裡分享一些經典的排序演算法。先附上demo位址 氣泡排...
資料結構與演算法之排序演算法 氣泡排序
2016年10月18日15 34 24 by piaxiaohui 氣泡排序 是一種交換排序,它的基本思想是 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序的由來,就有些類似於水中的bubble,比較輕的bubble始終在水的底層,而較輕的bubble在水的上層 較輕的b...
資料結構與演算法 排序演算法之氣泡排序
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小...