归并排序

void merge(vector<int> &arr, int left, int mid, int right) {
    int lpos = left;
    int rpos = mid + 1;
    int poss = left;
    int i = 0;
    vector<int> tempArr;
    while (lpos <= mid && rpos <= right) {
        if (arr[lpos] < arr[rpos]) {
            tempArr.push_back(arr[lpos++]);
        }
        else {
            tempArr.push_back(arr[rpos++]);
        }
    }
    while (lpos <= mid) {
        tempArr.push_back(arr[lpos++]);
    }
    while (rpos <= right) {
        tempArr.push_back(arr[rpos++]);
    }
    while (left <= right) {
        arr[left] = tempArr[i];
        i++;
        left++;
    }
}

void mSort(vector<int> &arr, int left, int right) {
    if (left < right) {
        int mid = (left + right) / 2;
        mSort(arr, left, mid);
        mSort(arr, mid+1, right);
        merge(arr, left, mid, right);
    }
}

void mergeSort(vector<int> &arr) {
    mSort(arr, 0, arr.size() - 1);
}

 

posted @ 2022-03-22 17:34  ainingxiaoguai  阅读(21)  评论(0)    收藏  举报