合并排序

#include<iostream>

usingnamespace std;

 

void Merge(int *array, intlow, intmiddle, inthigh//合并

{

    int *A = newint[high - low + 1];  //临时数组,存储个数为high - low + 1个数据

    int i = low;

    int j = middle + 1;

    int k = 0;

    while (i <= middle && j <= high//直至前半部或后半部数据完全录入暂存

    {

        if (array[i] < array[j])  //如果前半部的数据小于后半部的,前半部数据暂存

            A[k++]= array[i++];

        else                     //否则后半部数据暂存,并下标自加

            A[k++]= array[j++];

    }

 

    while (i <= middle) //保证前半部数据录入暂存

        A[k++]= array[i++];

    while (j <= high)   //保证后半部数据录入暂存

        A[k++]= array[j++];

    for (i = low; i <= high; i++)  //将暂存的数据重新填充至array[low]--array[high]

        array[i] = A[i - low];

}

 

void MergeSort(int *array, intlow, inthigh)

{

    int middle;  //分割问题

    if (low < high)

    {

        middle= (low + high) / 2;  //分割问题

        MergeSort(array, low, middle); //前半部

        MergeSort(array, middle + 1, high);  //后半部

        Merge(array, low, middle, high);  //合并

    }

}

 

int main()

{

    int n;

    cout<<"输入需要排列数据的个数:";

    cin >> n;  //录入需要排列的个数

 

    int *array = newint[n];

    cout<< endl <<"请输入数据:"<< endl;

    for (int i = 0; i < n;i++)

        cin>> array[i];  //录入未排序的数据

 

    MergeSort(array,0, n - 1);  //进行排序

 

    cout<<"排列后数据:"<< endl;

    for (int j = 0; j < n;j++)  //输出排列结果

        cout<< array[j] <<" ";

    cout<< endl;

    system("pause");

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值