美文网首页
1203: 逆序数(归并排序)

1203: 逆序数(归并排序)

作者: Celia_QAQ | 来源:发表于2019-03-20 21:32 被阅读0次

Time Limit: 1 SecMemory Limit: 128 MB

Submit: 642Solved: 147

[Submit][Status][Web Board]

Description

在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数不小于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。

如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4。给出一个整数序列,求该序列的逆序数。

Input

多组测试数据

每组测试数据分两行,第一行一个正整数n(n <= 50000)

第二行有n个元素(0 <= A[i] <= 10^9)

Output

每组测试数据输出一行表示逆序数

Sample Input

4

2 4 3 1

3

1 1 1

Sample Output

4

3


归并排序复习:[算法]——归并排序(Merge Sort) - eudiwffe - 博客园

数据结构及算法基础--归并排序(Merge Sort) - 霄十一郎 - 博客园

思路:分别对前面和后面进行归并排序,然后合并起来

代码参考:【ZCMU1203】逆序数(归并) - よろしくお願いします - CSDN博客

zcmu--1203: 逆序数(归并排序) - 冲鸭٩꒰▽ ꒱۶⁼³₌₃ - CSDN博客

ZCMU-1203-逆序数 - ZCMUCZX的博客 - CSDN博客

POJ 0809 求逆序对数(归并排序求逆序数) - Foresee的博客 - CSDN博客


AC代码:

#include <bits/stdc++.h>

using namespace std;

const int maxn=1e5+5;

int a[maxn],b[maxn],sum;

void mergeSort(int front,int mid,int rear)//归并排序-合并部分

{

int x1=front,x2=mid+1,count=0;

while(x1<=mid && x2<=rear){

if(a[x1]<a[x2])

b[count++]=a[x1++] ;

else {

sum+=(mid-x1+1);

b[count++]=a[x2++];

}

}

while(x1<=mid)

b[count++] = a[x1++];

while(x2<=rear)

b[count++] = a[x2++];

for(int i=front;i<=rear;i++)

a[i]=b[i-front]; //

}

void merge(int front,int rear){

if(front<rear){

int mid=(front+rear)/2;//二分循环

merge(front,mid); //前部分排序

merge(mid+1,rear);//后部分排序

mergeSort(front,mid,rear);//合并前后两部分呢

}

}

int main()

{

int n,i,j,count;

while(~scanf("%d",&n)){

sum=0;

memset(a,0,sizeof(a));

memset(b,0,sizeof(b));

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

scanf("%lld",&a[i]);

}

merge(0,n-1);

printf("%d\n",sum);

}

return 0;

}

相关文章

  • 1203: 逆序数(归并排序)

    Time Limit:1 SecMemory Limit:128 MB Submit:642Solved:147 ...

  • php常用的排序算法与二分法查找

    一 : 归并排序 将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用...

  • 归并排序

    归并排序是利用归并的思想对数列进行排序。--将两个有序数列合并成一个有序数列,称之为“归并”,归并包括从上往下和从...

  • 算法 | 归并排序

    归并排序 归并排序算法的核心就是 “归并”,将两个有序的数列合并,形成更大的有序数组。 归并排序的原理 上面说了,...

  • 归并排序

    归并排序的基本思路: merge函数将两个有序数列归并到一个有序数列中 根据分治法,利用递归,不断归并有序数列 递...

  • 面试题总结

    算法思维 简述归并排序归并排序是一个使用分治策略来对乱序数组进行排序的算法,使用的思想是将乱序数组不断切割分解成若...

  • 3.归并排序

    1.什么是归并排序? 归并:将两个有序数组合并成一个更大的有序数组。 归并排序有两个主要操作:递归和合并。要将一个...

  • 排序

    归并排序,N个有序数组的归并排序 无序数组查找中位数 1.1 将前(n+1)/2个元素调整为一个最小堆; 1.2 ...

  • 归并排序

    将两个的有序数列合并成一个有序数列,我们称之为"归并"。 归并排序(Merge Sort)就是利用归并思想对数列进...

  • 排序算法

    常考排序 快速排序 归并排序 归并排序求逆序数对 堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法。 堆积...

网友评论

      本文标题:1203: 逆序数(归并排序)

      本文链接:https://www.haomeiwen.com/subject/cvkxvqtx.html