資料結構與演算法之排序

2021-10-01 15:04:27 字數 1961 閱讀 3516

三、演算法效能:

二、七種排序演算法

資料結構之線性表

資料結構之鍊錶

資料結構之串

資料結構之圖

資料結構之排序演算法

對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 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小...