區間內只剩乙個/沒有數時,結束遞迴
找區間左端當作參考值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在奇數長度陣列的中間往右第乙個,偶數長度陣列的右半邊第乙個,極限情況...