归并排序

void merge(int A[],int Pos_low,int Pos_mid,int Pos_high){
    int* B=new int[Pos_high-Pos_low+1];
    int i=Pos_low,j=Pos_mid+1,k=0;
    while(i<=Pos_mid and j<=Pos_high){
        if(A[i]<=A[j]){
            B[k]=A[i];
            i++;

        }
        else{
            B[k]=A[j];
            j++;
        }
        k++;
    }
    while (i<=Pos_mid){
        B[k]=A[i];
        k++;
        i++;

    }
    while (j<=Pos_high){
        B[k]=A[j];
        k++;
        j++;

    }
    for (int i = Pos_low,k=0; i <= Pos_high; i++) {  //注意等于号!!!!!!!!!!!
        A[i]=B[k];
        k++;

    }
    delete[]B;



}
void MergeSort(int A[],int low,int high){
    if(low<high){
        int mid =  low + (high - low)/2;  // 取得序列中间的元素
        MergeSort(A,low,mid);
        MergeSort(A,mid+1,high);
        merge(A,low,mid,high);
    }

}

 

posted @ 2022-03-26 22:37  小白白中白  阅读(14)  评论(0编辑  收藏  举报