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:归并排序与快速排序模板的主要内容,如果未能解决你的问题,请参考以下文章

算法系列01:快速排序&&归并排序

Luogu 1177 - 模板快速排序 - [快速排序][归并排序][无旋Treap]

PAT排序题---1035 插入与归并 (25分)

JavaScript算法(归并排序与快速排序)

常用算法的简洁代码实现之快速排序归并排序

搜索与排序—— 归并排序与快速排序