快速排序
分析:資料結構p186.重要
當原始檔有序時複雜度是o(n2).此時氣泡排序最好,無序時快速排序是最好的方法。
void quicksort(int *a,int l,int r)
int i=l;
int j=r;
int x=a[i];//a[l]即a[i]就是第乙個坑
//挖坑填數
while (j>i)
if (j>i)
// 從左向右找大於或等於x的數來填a[j]
while (a[i]i)
if (j>i)
} //退出時,i等於j。將x填到這個坑中。
a[i]=x;
//分治法
quicksort(a,l,i-1);
quicksort(a,i+1,r);
}
歸併排序
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void mergearray(int a, int first, int mid, int last, int temp)
{ int i=first;
int n=mid;
int j=mid+1;
int m=last;
int k=0;
while (i<=n&&j<=m)
{ //比較二個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數
if (a[i]
演算法 分治法 快速排序,歸併排序
分治法,是演算法思想裡最基礎的思想。這也和人的基本思維有關,當我們需要解決乙個大的問題時,直覺的就會將這個大問題分成多個小問題來解決。大量的經典演算法,都是基於分治法。比如,快速排序,歸併排序。當然,最讓人想起來的,就是二分查詢了。分治,分而治之。分的原因是因為問題的規模太大,需要拆開了解決,目的是...
歸併排序 快速排序 分治思想
蒟蒻來水一篇博文方便複習參考 快速排序的基本原理 隨機選擇乙個基點,將比基點大的元素放在基點左側,將比基點小的元素放在基點右側。然後再分別只看基點左側和右側,重複上述過程。由於其利用了分治思想,在平均狀態下其時間複雜度為o nlogn 基本 如下 includeusing namespace std...
分治演算法 歸併排序
問題描述 輸入 待排序列r n 待排區間 s,t 輸出 公升序序列r s r t 分析 1 劃分 2 求解子問題 3 合併 歸併排序首先執行劃分過程,直到子串行長度為1,再在回溯的過程中排序。在merge 函式中,由於回溯回來的兩個子串行已經有序,所以只需依次取出兩者中最小值中的較小者即可。incl...