分治演算法 快速排序,歸併排序

2021-06-25 19:47:25 字數 824 閱讀 4103

快速排序  

分析:資料結構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...