排序算法-二路归并排序

二路归并算法思想:将一个无序数组从中间分为两个子数组,子数组又从中间分为两个子数组,按此规则直到数组不可分,再依次对有序子数组进行排序。假如无序数组

下面举一个实例:

如下所示是一个无序的数组{13 7 9 3 14 29 16 1},接下来我们用二路归并法对其进行排序。

首先:找到数组中间的数字3,接下来以{13 7 9 3}(数字3的左边)为一组进行排序,{14 29 16 1}(数字3的右边)为一组进行排序,找寻{13,7,9,3}的中间数字7,(数字7的左边){13,7}为一组,(数字7的右边){9,3}为一组进行排序,,,

==最后的算法过程可简化为如下模式【 {(13,7)(9,3)} {(14,29)(16,1)} 】=》【 { (7,13) (3,9) } {(14,29)(1,16)} 】=》【 { 3,7,9,13} {1,14,16,29}】=》【1,3,7,9,13,14,16,29】

//目的:将数组a[n]进行从小到大排序
void pai(int a[],int low,int high)
{
    if(low<high)
    {
        int mid=(low+high)/2;
        pai(a,low,mid);
        pai(a,mid+1,high);
        merge(a,low,high);//将a[low],a[low+1]...a[high]进行由小到大的排序。
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42373888/article/details/82145918