資料結構 排序演算法總結

2021-10-08 12:45:35 字數 2343 閱讀 5643

1.排序:所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。

2.穩定性:假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序後的序列中,r[i]仍在r[j]之前,則稱這種排序演算法是穩定的;否則稱為不穩定的。

3.內部排序:資料元素全部放在記憶體中的排序。

4.外部排序:資料元素太多不能同時放在記憶體中,根據排序過程的要求不能在內外存之間移動資料的排序。

5.常見的排序演算法

// 插入排序

void

insertsort

(int

* a,

int n)

;// 希爾排序

void

shellsort

(int

* a,

int n)

;// 選擇排序

void

selectsort

(int

* a,

int n)

;// 堆排序

void

adjustdwon

(int

* a,

int n,

int root)

;void

heapsort

(int

* a,

int n)

;// 氣泡排序

void

bubblesort

(int

* a,

int n)

// 快速排序遞迴實現

// 快速排序hoare版本

intpartsort1

(int

* a,

int left,

int right)

;// 快速排序挖坑法

intpartsort2

(int

* a,

int left,

int right)

;// 快速排序前後指標法

intpartsort3

(int

* a,

int left,

int right)

;void

quicksort

(int

* a,

int left,

int right)

;// 快速排序 非遞迴實現

void

quicksortnonr

(int

* a,

int left,

int right)

// 歸併排序遞迴實現

void

mergesort

(int

* a,

int n)

// 歸併排序非遞迴實現

void

mergesortnonr

(int

* a,

int n)

// 計數排序

void

countsort

(int

* a,

int n)

1.插入排序

基本思想:直接插入排序是一種簡單的插入排序法,其基本思想是:把待排序的記錄按其關鍵碼值的大小逐個插入到乙個已經排好序的有序序列中,直到所有的記錄插入完為止,得到乙個新的有序序列 。

2.選擇排序

基本思想:每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,直到全部待排序的資料元素排完 。

3.交換排序

基本思想:所謂交換,就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的前部移動。

4.歸併排序

基本思想:歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。

5.非比較排序

基本思想:計數排序又稱為鴿巢原理,是對雜湊直接定址法的變形應用。

資料結構排序演算法總結

常用的演算法有插入排序 氣泡排序 選擇排序 快速排序 歸併排序 希爾排序 堆排序 計數排序和基數排序。下面對著九種常見排序方法進行總結 排序方法 時間複雜度 空間複雜度 個人評價 插入排序 o n 2 o 1 選擇排序 氣泡排序 希爾排序 o n log n 快速排序 o log n 歸併排序 o ...

資料結構 排序演算法總結

1 二路歸併排序 二路歸併排序 思路 利用分治思想,對原陣列進行二分分段,使元素在每一小段內有序,然後逐漸合併 如,最小分段是2,先2內有序,合併為4,4內有序。時間複雜度 o nlogn 空間複雜度 o n 需要乙個額外的陣列作為臨時儲存 static void mergesort int arr...

資料結構 排序演算法總結

def bubblesort array flag false length len array for i in range length for j in range length i 1 if array j array j 1 temp array j array j array j 1 a...