【排序演算法】歸併排序(C++)
阿新 • • 發佈:2018-12-11
歸併排序的遞迴實現 C++
class MergeSort {
public:
int* mergeSort(int* A, int n) {
// write code here
merge(A,0,n-1);
return A;
}
void merge(int* A, int left, int right)
{
if(left<right) //待排序序列只有一個記錄,遞迴結束
{
int middle=(left+right)/2;
merge (A,left,middle); //歸併排序前半個序列
merge(A,middle+1,right); //歸併排序後半個序列
mergearray(A,left,middle,right); //將兩個已排序的子序列歸併
}
}
void mergearray(int* A, int left, int m, int right)
{
int tmpA[right-left+1];
int i=left,j=m+1,tmpi=0;
while (i<=m&&j<=right)
{
//取左右子序列中較小者放入臨時陣列
if(A[i]<=A[j])
tmpA[tmpi++]=A[i++];
else
tmpA[tmpi++]=A[j++];
}
while(i<=m) //若左子序列沒有處理完,則進行收尾工作
tmpA[tmpi++]=A[i++];
while (j<=right) //若右子序列沒有處理完,則進行收尾工作
tmpA[tmpi++]=A[j++];
for(tmpi=0;tmpi<right-left+1;tmpi++)
A[left+tmpi]=tmpA[tmpi];
}
};