归并排序

归并排序
//归并merge,需要一个辅助数组

void merge(vector<int>&arr, int start, int mid, int end, vector<int>&temp)
{
    int istart = start;
    int iend = mid;
    int jstart = mid + 1;
    int jend = end;
    while (istart <=iend&& jstart<=jend)
    {
        if (arr[istart] > arr[jstart])
        {
            temp.push_back(arr[jstart]);
            jstart++;
        }
        else
        {
            temp.push_back(arr[istart]);
            istart++;
        }
    }
    while (istart <= iend)
    {
            temp.push_back(arr[istart]);
            istart++;
    }
    while (jstart <= jend)
    {
        temp.push_back(arr[jstart]);
        jstart++;
    }
    for (int i = 0; i < temp.size(); i++)
    {
        arr[start + i] = temp[i];
    }
    temp.clear();
}
void mergeSort(vector<int>&arr, int start, int end, vector<int>&temp)
{
    if (start < end)
    {
        int mid = (start + end) / 2;
        mergeSort(arr, start, mid, temp);
        mergeSort(arr, mid + 1, end, temp);
        merge(arr, start, mid, end, temp);
    }
}
全部评论

相关推荐

安静的鲸鱼offer...:神仙级别hr,可遇不可求,甚至他可能也是突然有感而发。只能说遇上是件幸事。
秋招开始捡漏了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务