歸併排序和快速排序

2021-09-11 05:29:48 字數 1193 閱讀 4594

歸併排序的陣列排序任務可以如下完成:

1) 把前一半排序

2) 把後一半排序

3) 把兩半歸併到乙個新的有序陣列,然後再拷貝回原陣列,排序完成。

#include using namespace std;

void merge(int a,int s,int m,int e,int tmp)

while(p1 <= m)

tmp[pb++] = a[p1++];

while(p2 <= e)

tmp[pb++] = a[p2++];

for(int i = s;i<=e;i++)

a[i] = tmp[i-s]; //因為是對a陣列[s,e]進行排序,但使用tmp陣列時是從0開始存放的 }

void mergesort(int a,int s,int e,int tmp) }

int main();

int b[100];

int size = sizeof(a)/sizeof(int);

mergesort(a,0,9,b);

for(int i = 0;i<10;i++)

return 0;

}

快速排序的陣列排序任務可以如下完成:

1)設k=a[0], 將k挪到適當位置,使得比k小的元素都

在k左邊,比k大的元素都在k右邊,和k相等的,不關心

在k左右出現均可 (o(n)時間完成)

2) 把k左邊的部分快速排序

3) 把k右邊的部分快速排序

#include using namespace std;

void swap(int &a,int &b)

void quicksort(int a,int s,int e)

//外層迴圈退出的時候i等於j,二者都指向k

//退出時保證a[i]左側的數都小於它,右側的數都大於它,然後對a[i]兩側的序列進行排序

quicksort(a,s,i-1);

quicksort(a,i+1,e);

}int main();

int size = sizeof(a)/sizeof(int);

quicksort(a,0,size - 1);

for(int i = 0;ireturn 0;

}

歸併排序和快速排序

歸併排序 先將問題分解為小問題即乙個個子序列,再將子串行按順序合併。class mergesort mergesort a,0 a.length 1 for int t a public static void mergesort int a,int m,int n public static vo...

快速排序和歸併排序

遞推公式 merge sort p,r merge merge sort p,q merge sort q 1 r 終止條件 p r 10組測試資料 for let i 0 i 10 i 生成10個隨機元素的測試陣列 function gettestdata return ret 排序函式 func...

排序 歸併排序和快速排序

1,歸併排序的基本思想 1,將兩個或兩個以上的有序序列合併成乙個新的有序序列,比如有序序列 v 0 v m 和 v m 1 v n 1 合併為 v 0 v n 1 這種歸併方法稱為 2 路歸併 1,必須大於 1 個有序序列 2,必須有序 2,歸併的套路 1,將 3 個有序序列歸併為乙個新的有序序列,...