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