归并排序C语言实现(2)

void Merge(int *num, int start, int mid, int end)
{
    int *temp = (int *)malloc((end-start+1) * sizeof(int));    //申请空间来存放两个有序区归并后的临时区域
    int i = start;
    int j = mid + 1;
    int k = 0;

while (i <= mid && j <= end)
    {
        if (num[i] <= num[j])
        {
            temp[k++] = num[i++];
        }
        else
        {
            temp[k++] = num[j++];
        }
    }

while (i <= mid)
    {
        temp[k++] = num[i++];
    }
    while (j <= end)
    {
        temp[k++] = num[j++];
    }

//将临时区域中排序后的元素,整合到原数组中
    for (i = 0; i < k; i++)
    {
        num[start + i] = temp[i];
    }

free(temp);
}

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/edfcb21ba03c611a6de0816acb66a8b9.html