PAT:归并排序与快速排序模板
Posted 花落,莫相离
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT:归并排序与快速排序模板相关的知识,希望对你有一定的参考价值。
1.归并排序
const int maxn = 1010;
void merge(int A[], int left1, int right1, int left2, int right2){
int i = left1, j = left2;
int temp[maxn], len = 0;
while(i <= right1 && j <= right2){
if(A[i] < A[j]) temp[len++] = A[i++];
else temp[len++] = A[j++];
}
while(i <= right1) temp[len++] = A[i++];
while(j <= right2) temp[len++] = A[j++];
for(int i = 0; i < len; i++){
A[left1+i] = temp[i]; //左边记得加上偏移量left1
}
}
void mergeSort(int A[], int left, int right){
if(left < right){//此处用if即可,因为是递归形式,故不用while
int mid = (left + right) / 2;
mergeSort(A, left, mid);
mergeSort(A, mid+1, right);
merge(A, left, mid, mid+1, right);
}
}
2.快速排序
int Partition(int A[], int left, int right){
int temp = A[left];
while(left < right){
while(left < right && temp < A[right]) right--;
A[left] = A[right];
while(left < right && temp >= A[left]) left++;
A[right] = A[left];
}
A[left] = temp;
return left;
}
void quickSort(int A[], int left, int right){
if(left >= right) return; //递归边界,退出递归
int pos = Partition(A, left, right);
quickSort(A, left, pos-1);
quickSort(A, pos+1, right);
}
以上是关于PAT:归并排序与快速排序模板的主要内容,如果未能解决你的问题,请参考以下文章