归并排序

归并排序
//归并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);
    }
}
全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务