zoukankan      html  css  js  c++  java
  • 7-2 求逆序对数目 (20分) 归并排序 O(nlogn)

    输入样例:

    在这里给出一组输入。例如:

     6
    -42 23 6 28 -100 65537

    输出样例:

    在这里给出相应的输出。例如:

    5

    #include <iostream>
    using namespace std;
    int count=0;
    //合并两个有序线性表 (两个线性表在一个线性表内)== 给数组 A 排序
    void Merge(int A[],int low,int mid,int high ){
    int B[1000];
    int i,j,k;

    for(k=low;k<=high;k++){ //复制A到B中
    B[k]=A[k];
    }

    for(i=low,j=mid+1,k=i;i<=mid && j<=high ;k++){ //在B数组中分两段 按顺序两两比较 选取较小的给A数组
    if(B[i]<=B[j]) A[k]=B[i++];
    else
    {
    A[k]=B[j++];
    count=count+(mid-i+1); // 计算逆序
    }
    }

    while(i<=mid){
    A[k++]=B[i++];
    }
    while(j<=high){
    A[k++]=B[j++];
    }
    }

    void MergeSort(int A[],int low ,int high){ // 算法 MergeSort 的递归过程只是将待排集合一分为二,直至待排序列只剩下一个元素为止
    if(low<high){
    int mid = (low+high)/2;
    MergeSort(A,low,mid);
    MergeSort(A,mid+1,high);
    Merge(A,low,mid,high);
    }
    }

    int main(){
    int n;
    cin>>n;
    int A[1000];
    for(int i=0;i<n;i++){
    cin>>A[i];
    }
    MergeSort(A,0,n-1);
    cout<<count<<endl;
    return 0;
    }

  • 相关阅读:
    base64 转blob,base64 转文件
    下载附件时防止连点
    windows更新失败
    ValidationError: webpack Dev Server Invalid Options
    导入,导出
    软件的结构
    VueRouter(一)
    根据IP判断所在地区
    phpcms v9 非超级管理员 发布不了内容的解决办法
    VIM 快捷键
  • 原文地址:https://www.cnblogs.com/lvjingyuan/p/13745331.html
Copyright © 2011-2022 走看看