归并排序--逆序数对的计算

来源:互联网 发布:知乎 阳台躺椅 书桌 编辑:程序博客网 时间:2024/04/29 16:20
#include<iostream>using namespace std;const int M = 1000;int arr[M];int cnt = 0;void mege(int arr[] ,int l, int m, int r){    int begin1 = l;    int begin2 = m + 1;    int end1 = m;    int end2 = r;    int k = 0;    int temp[M];    while(begin1 <= end1 && begin2 <= end2)    {        if(arr[begin1] < arr[begin2])        {            temp[k++] = arr[begin1++];            cnt += begin2 - (m + 1);        }        else        {            temp[k++] = arr[begin2++];        }    }    while(begin1 <= end1)    {        temp[k++] = arr[begin1++];        cnt += end2 - m;    }    while(begin2 <= end2)    {        temp[k++] = arr[begin2++];    }    for(int i = l;i <= r;i++)        arr[i] = temp[i - l];}void Megesort(int arr[], int l, int r){    int m = (l + r) / 2;    if(l < r)    {        Megesort(arr, l , m);        Megesort(arr, m + 1, r);        mege(arr, l, m, r);    }}int main(){    int len;    cout << "请输入需要排序的序列的长度:" << endl;    cin >> len;    cout << "请输入需要排序的序列:" << endl;    for(int i = 1;i <= len;i++)    {        cin >> arr[i];    }    Megesort(arr, 1, len);    for(int i = 1;i <= len;i++)    {        cout << arr[i] << " ";    }    cout << endl;    cout << "逆序数的数量为:" << cnt << endl;    return 0;}

0 0
原创粉丝点击