归并排序C++实现——基于数组的

来源:互联网 发布:网络安全教育简报 编辑:程序博客网 时间:2024/06/11 02:27

归并排序C++实现——基于数组的
/关于归并排序理论知识网上应该也很详细了,我在这里就分享一下自己的代码实现,有错误的地方欢迎大家指出/

#include <iostream>//能不用using namespace std 就尽量不用;using std::cout;using std::endl;using std::cin;//high is the index of array//对已排好的两个数组进行合并void merge(int *arr, int low, int mid, int high){    int i = low, j = mid + 1;    int count = 0;    int *data = new int[high - low + 1];    for (i = low, j = mid + 1; i <= mid && j <= high;)    {        if (arr[i] <= arr[j])        {            data[count++] = arr[i];            i++;        }        else        {            data[count++] = arr[j];            j++;        }    }    if (i <= mid)    {        for (; i <= mid; i++)        {            data[count++] = arr[i];        }    }    else    {        for (; j <= high; j++)        {            data[count++] = arr[j];        }    }    i = low;    for (int k = 0; k < count&&i<=high; k++,i++)    {        arr[i] = data[k];    }    delete[] data;}//分而治之,将长数组一直进行二等分,当分到只剩一个时返回void Msort(int* arr, int low, int high){    if (low >= high)    {        return;    }    int mid = (low + high) / 2;    Msort(arr, low, mid);    Msort(arr, mid+1, high);    merge(arr, low, mid, high);}int main(){    int len;    cout<< "Please enter the length of array you want to sort : ";    cin >> len;    int *arr = new int[len];    cout << "The data is : ";    for (int i = 0; i < len; i++)    {        cin >> arr[i];    }    Msort(arr, 0, len - 1);    cout << "After sort : ";    for (int i = 0; i < len; i++)    {        cout << arr[i] << " ";    }    cout << endl;    system("pause");    return 0;}
原创粉丝点击