歸併排序求逆序數

2022-06-01 02:57:12 字數 1009 閱讀 7343

逆序數定義:在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數

下面給出一組資料進行分析:

a=;根據歸併排序通過 mid 將陣列分為兩部分;

一部分是 left 到 mid a----a 即3,4,5;

一部分是 mid+1到 right a----a 即6,7,8;

歸併排序中將兩部分陣列合併時是通過判斷第一部分和第二部分陣列當前元素的大小來合併的;

如果第一部分的0位大於第二部分的0位,則儲存陣列的0位等於小的0位,小的一部分陣列的指向向後移,然後再次比較確定儲存陣列的1位..........

1:i=0  j=3; a【i】=3<a【j】=4 ;  c=a【i】;i++;(沒有逆序)

2:i=1  j=3; a【i】=6  >  a【j】=4;c=a【j】;j++   此時逆序數總數因加上 mid-i+1 =2(第一部分中6,8大於第二部分的當前值4)

(即第一部分中比第二部分當前值大的元素的總數 )

模擬玩後樣例的逆序數是5;

給出模板:

#includeusing namespace std;

const int maxn=1000;

int a[maxn],c[maxn],count;

void merge(int a,int left,int mid,int right,int c)

while(i<=mid)c[k++]=a[i++];

while(j<=right)c[k++]=a[j++];

for(int i=left;i<=right;i++)a[i]=c[i];

}void mergesort(int a,int left,int right,int c)

}int main()

return 0;

}

求逆序數 逆序數 歸併排序

求排列的逆序數 分治 一 題目描述 總時間限制 1000ms 記憶體限制 65536kb 描述 在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1...

歸併排序 求逆序數

首先需要了解逆序對的概念 如果在乙個序列 數列中,滿足 則ax和ay稱為一對逆序對。現在考慮乙個問題 對乙個大小為n 即有n個元素 元素隨機無序且唯一的整數序列中,平均有多少個逆序對?乙個構造證明的方法如下 設乙個隨機無序且元素唯一的整數序列為 我們令lr為l的反向序列,即 然後在lr中任取兩個數,...

歸併排序求逆序數

輸入 n 陣列中元素個數 x 最後所存在的每對逆序對所需要花費的錢 y 按任意順序交換陣列中相鄰兩個元素所要花費的錢 n個陣列中元素 輸出 求使陣列變為公升序所需要的最少 即求該陣列的逆序數 按陣列順序 任意順序交換次數均為該陣列的逆序數次 歸併排序求逆序數 歸併排序採用分治策略 ex 重點在於合併...