归并排序

来源:互联网 发布:linux 发送post请求 编辑:程序博客网 时间:2024/06/18 06:11
#include<iostream>using namespace std;/*新增2个数组,数组A存放arr[begin,mid],数组B存放arr[mid+1,end]并且在数组A和B之后添加一个INF的数字,这样可以避免判断A和B有一个读取完了的情况*/void Merge(int* arr, int begin, int mid, int end){    int n1 = mid - begin + 1;    int n2 = end - mid;    int* A= new int[n1+1];    int* B = new int[n2+1];    for (int i = 0; i < n1; i++)    {        A[i] = arr[begin + i];    }    cout << endl;    for (int i = 0; i < n2; i++)    {        B[i] = arr[mid+1 + i];    }    cout << endl;    A[n1] = 0x7fffffff;    B[n2] = 0x7fffffff;    int index1 = 0;    int index2 = 0;    for (int i = begin; i <= end; i++)    {        if (A[index1] <= B[index2])        {            arr[i] = A[index1];            index1++;        }        else        {            arr[i] = B[index2];            index2++;        }    }    delete[] A;    delete[] B;}void MergeSort(int* arr,int begin,int end){    if (begin < end)    {        int mid = (begin + end) / 2;        MergeSort(arr, begin, mid);        MergeSort(arr, mid + 1, end);        Merge(arr, begin, mid, end);    }} static const int len = 1000;int main(){    int arr[len];    for (int i = 0; i < len; i++)    {        arr[i] = len - i;    }    MergeSort(arr, 0, len - 1);    for (int i = 0; i < len; i++)    {        cout << arr[i] << "  ";    }    cout << endl;    return 0;}

程序的运行结果
这里写图片描述