第三章 :查詢與排序-------3.7分治模式的完美詮釋_歸併排序
分治模式的完美詮釋_歸併排序
思路:
//思路:
void sort(int arr[],int low, int high){
if(low<high){
int middle=low+((high-low)>>1);
sort(arr,low,middle);// 對左側進行排序
sort(arr,middle+1,high);//對右側進行排序
merge(arr,low,middle,high);//合併
}
}
//虛擬碼:
MergeSort:
mergeSort(A,p,r){
if(p<r){
mid=p+((r-p)>>1);
mergeSort(A,p,mid);
mergeSort(A,mid+1,r);
merge(A,p,mid,r);
}
}
helper=[A.length];
//二路歸併:
merge(A,p,mid,r){
//先把A中的資料拷貝到helper中
copy(A,p,helper,p,r-p+1);
left=p; //左側隊伍的頭部指標,指向待比較的元素
right=mid+1;//右側隊伍的頭部指標,指向待比較的元素
current=p; //原陣列的指標,指向待填入資料的位置
while(left<=mid&&right<=r){
if(helper[left]<=helper[right]){
A[current]=helper[left];
current++;
left++;
}
else{
A[current]=helper[right];
current++;
right++;
}
}
while(left<=mid){
A[current]=helper[left];
current++;
left++;
}
}
將原陣列拷貝,二路進行比較,小的放回原陣列(依次)。
最後,若右側那一路沒放完,不需要管。
若左側那一路沒放完,while迴圈放入原陣列。
相關文章
- 歸併排序(C++_分治遞迴)排序C++遞迴
- 【分治演算法】歸併排序,快速排序和漢諾塔演算法排序
- 第三章:查詢與排序(下)----------- 3.20桶排序排序
- 第三章:查詢與排序(下)----------- 3.21基數排序排序
- [排序] 歸併排序排序
- 第三章:查詢與排序(下)----------- 3.19 計數排序排序
- 氣泡排序、歸併排序與快速排序比較排序
- 快速排序&&歸併排序排序
- 從零開始學資料結構和演算法 (五) 分治法 (二分查詢、快速排序、歸併排序)資料結構演算法排序
- 歸併排序排序
- 四、歸併排序 && 快速排序排序
- 歸併排序與快速排序的一個實現與理解排序
- 第三章:查詢與排序(下)----------- 3.28 特殊排序(利用sort函式)排序函式
- 第三章 :查詢與排序-------3.2你需要掌握的快速排序演算法排序演算法
- 第三章:查詢與排序(下)----------- 3.16堆的概念及堆排序思路排序
- 查詢與排序05,氣泡排序排序
- 查詢與排序04,插入排序排序
- 查詢與排序03,選擇排序排序
- 第三章 :查詢與排序(下)-------3.1分治法介紹及關鍵點解析排序
- 歸併排序--二路排序排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 歸併排序和基數排序排序
- 歸併排序--排序演算法排序演算法
- 排序演算法 - 歸併排序排序演算法
- 排序演算法——歸併排序排序演算法
- 排序演算法(歸併排序)排序演算法
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- O(lgn)的三種排序,快速排序、歸併排序、堆排序排序
- 【演算法】排序02——歸併排序介紹及其在分治演算法思想上與快排的區別(含歸併程式碼)演算法排序
- java歸併排序Java排序
- [java]歸併排序Java排序
- 歸併排序模板排序
- 查詢與排序02,折半查詢排序
- 排序(2)--選擇排序,歸併排序和基數排序排序
- 洛谷題單指南-分治與倍增-P1177 【模板】歸併排序排序
- 排序演算法之 '歸併排序'排序演算法
- php實現 歸併排序,快速排序PHP排序