设A[1..n]是一个包含N个非负整数的数组。如果在i〈 j的情况下,有A〉A[j],则(i,j)就称为A中的一个逆序对。
例如,数组(3,1,4,5,2)的“逆序对”有<3,1>,<3,2><4,2><5,2>,共4个。
那么该如何求出给定一个数列包含逆序对个数?

首先最简单的方法,直接遍历,时间复杂度为O(n^2)

源码如下:

//最简单的办法,直接枚举遍历
int last)
   3: {
int count = 0;
int i;
while(first < last)
   7:     {
   8:         i = first +1;
//    int cout_tmp = 0;
while(i <= last)
  11:         {            
if(a[i] <  a[first]){
  13:                 count++;
//        ++ cout_tmp;
  15:             }            
  16:             i++;
  17:         }
//cout<<cout_tmp<<endl;
  19:         first++;
  20:     }
  21:     cout << count << endl;
return count;
  23: }

相关文章: