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);
}

你可能感兴趣的:(程序员)