快速排序 堆排序 歸併排序總結(C 版)

2021-10-22 15:14:17 字數 3046 閱讀 7081

區間內只剩乙個/沒有數時,結束遞迴

找區間左端當作參考值ref進行劃分partition,並得到ref應該在的index;劃分後index左邊的都比ref小,右邊的都比ref

index左右遞迴的進行快速排序

#include

#include

using

namespace std;

void

quicksort

(vector<

int>

& arr,

int l,

int r)

;int

partition

(vector<

int>

& arr,

int l,

int r)

;int

main()

; vector<

int>

arr(a,a+12)

;quicksort

(arr,

0,arr.

size()

-1);

//mergesort(arr,0,arr.size()-1);

//heapsort(arr);

for(

auto it:arr)

cout<" ";

}void

quicksort

(vector<

int>

& arr,

int l,

int r)

intpartition

(vector<

int>

& arr,

int l,

int r)

arr[l]

=ref;

return l;

}

建初始大根堆:

堆頂為n個數里最大的,讓它與最後乙個節點交換,就選出了前n個裡最大的乙個並放在最後;然後對前n-1個數進行堆調整使其重新滿足大根堆;

迴圈步驟 2 ,直到最後只剩乙個數,這樣公升序排列就構造好了

#include

#include

using

namespace std;

void

heapsort

(vector<

int>

& arr)

;void

heapajust

(vector<

int>

& arr,

int start,

int end)

;int

main()

; vector<

int>

arr(a,a+12)

;//quicksort(arr,0,arr.size()-1);

//mergesort(arr,0,arr.size()-1);

heapsort

(arr)

;for

(auto it:arr)

cout<" ";

}void

heapsort

(vector<

int>

& arr)

}void

heapajust

(vector<

int>

& arr,

int start,

int end)

else

break;}

}

區間內只剩乙個/沒有數時,結束遞迴

找到區間中間座標mid,並對[l, mid][mid+1, r]兩個區間遞迴的進行歸併排序

對左右區間進行歸併merge,即合併兩個有序的陣列

#include

#include

using

namespace std;

void

mergesort

(vector<

int>

& arr,

int l,

int r)

;void

merge

(vector<

int>

& arr,

int l,

int mid,

int r)

;int

main()

; vector<

int>

arr(a,a+12)

;//quicksort(arr,0,arr.size()-1);

mergesort

(arr,

0,arr.

size()

-1);

//heapsort(arr);

for(

auto it:arr)

cout<" ";

}void

mergesort

(vector<

int>

& arr,

int l,

int r)

void

merge

(vector<

int>

& arr,

int l,

int mid,

int r)

while

(p<=mid)

tmp[i++

]=arr[p++];

while

(q<=r)

tmp[i++

]=arr[q++];

for(

int k=

0;k1;k++

) arr[l+k]

=tmp[k]

;}

堆排序 快速排序 歸併排序總結

二分查詢及其擴充套件應用場景 大端和小端的問題 2012 09 21 11 33 41 分類 演算法 資料結構 標籤 演算法資料結構 歸併排序 內部排序面試 舉報 字型大小大中小 訂閱這三個排序以前都寫過,快速排序還寫了遞迴版和迭代版。現在在這裡做一下總結。堆排序 heap sort 堆排序是一種樹...

快速排序 堆排序 歸併排序

快速排序 includeusing namespace std int a 8 int sz sizeof a sizeof int int partition int a,int p,int r int main const int sz sizeof a sizeof int 堆化 保持最大堆的...

快速排序,歸併排序,堆排序

l r 1在奇數長度陣列的中間,偶數長度陣列的左半邊最後乙個,極限情況下陣列只有兩個數,i遇到第乙個數就會停下,此時模擬i,j下標的數有無交換的情況,會發現j在停下來時都位於第乙個數的位置,因此用j,j 1才不會越界 l r 1 1在奇數長度陣列的中間往右第乙個,偶數長度陣列的右半邊第乙個,極限情況...