**自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...