题目
求一个数组中所有的逆序对数,如数组arr[]={5,2,4,9,8,6,13,14},逆序对有5,2; 5,4; 9,8; 9,6; 8,6; 逆序对数为5
分析
因为数组不是排序的,所以要找一个元素后面所有比它小的数,最直观的想法是依次遍历后续的元素。这样做的时间复杂度为O(n).
除此之外,涉及两个元素间相互比较的计算在数组的排序算法中最为常见了,归并排序在合并的时候可以记录下对比中的逆序对数:
代码
1 int MergeCore(int arr[],int small,int mid,int big,int tmp[]) 2 { 3 int k=0,i=small,j=mid+1; 4 int rever_num=0; 5 while (i<=mid&&j<=big) 6 { 7 if (arr[i]<=arr[j])