求乙個n個元素的逆序數
例如:的逆序數為:0+2+0+1+0=3
最直接的求解逆序數方法時間複雜度為o(n^2)
如果用分治的策略可以將時間複雜度降為o(n*logn),求n個元素的逆序數的分治思想如下:首先求前n/2個元素的逆序數,再求後n/2個
元素的逆序數,最後在排序過程中合併前後兩部分之間的逆序數
實現**如下:
#includeusing namespace std;
int invalid_input=false;
int cal_reverse(int *data,int len,int start,int end);
int merge_reverse(int *data,int len,int start,int mid,int end);
int main()
if(start==end)
return 0;
else }
int merge_reverse(int *data,int len,int start,int mid,int end)
else
}while(i<=mid)
while(j<=end)
for(i=start;i<=end;i++)
data[i]=temp[i];
delete temp;
return count;
}
求陣列的逆序數
題目 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就是1。方法1 o n 2 這個就不說了。方法2 借助歸併排序達到o...
陣列中的逆序數
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 解題思路 先把陣列分割成子陣列,先統計出子陣列內部的逆序對的數目,然後再統計出兩個相鄰子陣列之間的...
樹狀陣列求逆序對(逆序數)
逆序數 也叫逆序對 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。無重複的數 include include include include include include using namespace...