資料結構排序演算法總結

2022-07-16 07:24:11 字數 3365 閱讀 8451

**自shilin's bolg

資料結構排序這章內容比較經典,都是一些很好的演算法,將來很可能會用得到,總結一下,加深一下印象。

一、插入排序  1)直接插入排序  2)折半插入排序  3)希爾排序

二、交換排序  1)氣泡排序    2)快速排序

三、選擇排序  1)簡單選擇排序  2)堆排序

四、歸併排序

五、基數排序

一、插入排序

1)直接插入排序演算法演示

返回目錄

時間複雜度:平均情況—o(n2)    最壞情況—o(n2)    輔助空間:o(1)    穩定性:穩定

void insertsort(sqlist &l) 

} // insertsort

2)折半插入排序返回目錄

時間複雜度:平均情況—o(n2)     穩定性:穩定

void binsertsort(sqlist &l) 

for (j=i-1; j>=high+1; --j) l.r[j+1] = l.r[j]; // 記錄後移

l.r[high+1] = l.r[0]; // 插入

}} // binsertsort

3)希爾排序

演算法演示

返回目錄

時間複雜度:理想情況—o(nlog2n)     最壞情況—o(n2)     穩定性:

不穩定

void shellinsert(sqlist &l, int dk) 

} // shellinsert

void shellsort(sqlist &l, int dlta, int t)

if(!exchange) //本趟排序未發生交換,提前終止演算法

return;

} //endfor(外迴圈)

} //bubblesort

2)快速排序

演算法演示

返回目錄

時間複雜度:平均情況—o(nlog2n)     最壞情況—o(n2)     輔助空間:o(log2n)      穩定性:

不穩定

int partition(sqlist &l, int low, int high) 

return low; // 返回樞軸所在位置

} // partition

int partition(sqlist &l, int low, int high)

l.r[low] = l.r[0]; // 樞軸記錄到位

return low; // 返回樞軸位置

} // partition

void qsort(sqlist &l, int low, int high)

} // qsort

void quicksort(sqlist &l) // quicksort

三、選擇排序

1)簡單選擇排序

演算法演示

返回目錄

時間複雜度:平均情況—o(n2)     最壞情況—o(n2)     輔助空間:o(1)      穩定性:

不穩定

void selectsort(sqlist &l) 

}} // selectsort

2)堆排序

演算法演示

返回目錄

時間複雜度:平均情況—o(nlog2n)     最壞情況—o(nlog2n)     輔助空間:o(1)      穩定性:

不穩定

void heapadjust(heaptype &h, int s, int m) 

h.r[s] = rc; // 插入

} // heapadjust

void heapsort(heaptype &h)

} // heapsort

四、歸併排序

演算法演示返回目錄

時間複雜度:平均情況—o(nlog2n)      最壞情況—o(nlog2n)      輔助空間:o(n)      穩定性:

穩定

void merge (redtype sr, redtype tr, int i, int m, int n) 

if (i < =m) // tr[k..n] = sr[i..m]; 將剩餘的sr[i..m]複製到tr

while (k < =n && i < =m) tr[k++]=sr[i++];

if (j < =n) // 將剩餘的sr[j..n]複製到tr

while (k < =n &&j < =n) tr[k++]=sr[j++];

} // merge

void msort(redtype sr, redtype tr1, int s, int t)

} // msort

void mergesort(sqlist &l) // mergesort

五、基數排序

演算法演示

返回目錄

時間複雜度:平均情況—o(d(n+rd))      最壞情況—o(d(n+rd))      輔助空間:o(rd)      穩定性:

穩定

void distribute(sllist &l, int i, arrtype &f, arrtype &e) 

} // distribute

void collect(sllist &l, int i, arrtype f, arrtype e)

} l.r[t].next = 0; // t指向最後乙個非空子表中的最後乙個結點

} // collect

void radixsort(sllist &l)

} // radixsort

資料結構排序演算法總結

常用的演算法有插入排序 氣泡排序 選擇排序 快速排序 歸併排序 希爾排序 堆排序 計數排序和基數排序。下面對著九種常見排序方法進行總結 排序方法 時間複雜度 空間複雜度 個人評價 插入排序 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...