其他分享
首页 > 其他分享> > 归并排序C语言图文详解

归并排序C语言图文详解

作者:互联网

 算法原理:

       改归并排序将序列折半分成两个子序列,然后继续拆分,直到每个序列只有一个数据时,再将各个子序列排序后合并叠加。直到所有子序列都合并,排序完成。该算法采用分治的思想。

图解算法思路:

 

​编辑

 

​编辑

 

​编辑

 

​编辑

void Merge(int unsorted[],int left,int mid,int right,int temp[])
{
    int i = left;//左序列初始索引
    int j = mid+1;//右序列初始索引
    int k = 0;//临时数组索引
    while (i <= mid && j <= right)
    {//将两边数组的元素进行比较,依次填进临时数组
        if(unsorted[i] <= unsorted[j])//先将较小的放进去
        {
            temp[k++] = unsorted[i++];
        }
        else 
        {
            temp[k++] = unsorted[j++];
        }
    }
    while(i <= mid)
    {//将左边剩余元素填充进temp中
        temp[k++] = unsorted[i++];
    }
    while(j <= right)
    {//将右序列剩余元素填充进temp中
        temp[k++] = unsorted[j++];
    }
    k = 0;
    //将temp中的元素全部拷贝到原数组中
    while(left <= right)
    {
        unsorted[left++] = temp[k++];
    }
}

void MergeSort(int unsorted[],int left,int right,int temp[])
{
    if(left < right)
    {
        int mid = (left + right) / 2;
        MergeSort(unsorted, left, mid, temp);
        MergeSort(unsorted, mid+1, right, temp);
        Merge(unsorted, left, mid, right, temp);
    }
}



[点击并拖拽以移动]

 

标签:归并,编辑,int,C语言,索引,算法,序列,排序,图文
来源: https://www.cnblogs.com/guojianyu/p/16688014.html