統計逆序對的個數,並輸出具體的逆序對(分治演算法)

2021-09-16 12:30:36 字數 614 閱讀 7376

要求:借鑑歸併排序的演算法,在歸併的過程中,統計逆序對的個數,並記錄下具體的逆序對。設計乙個分治演算法,並用c/c++語言實現程式設計。

#include "stdio.h"

int count=0;

void merge(int r,int r1,int s,int m,int t) // 合併子串行

else

r1[k++]=r[j++];

} }while(i<=m) // 若第乙個子串行沒處理完,則進行收尾處理;下同

r1[k++]=r[i++];

while(j<=t)

r1[k++]=r[j++];

}void mergesort(int r,int s,int t)

}int main(),i;

mergesort(r,0,10); // 三個引數分別為待查陣列、起始下標、截止下標

for(i=0;i<=10;i++)

printf("%d ",r[i]);

printf("\n一共 %d個逆序對\n",count);

}

注:參考書籍 《演算法設計與分析(第二版)》 王紅梅 胡明 編著

js 統計逆序對的個數

1.分治思想,歸併排序思想 過程 先把陣列分割成子陣列,先統計出子陣列內部的逆序對的數目,然後再統計出兩個相鄰子陣列之間的逆序對的數目。在統計逆序對的過程中,還需要對陣列進行排序。如果對排序演算法很熟悉,我們不難發現這個過程實際上就是歸併排序 function inversepairs data l...

逆序對的個數

對於陣列a 1.n 若有ia j 則對偶 i,j 稱為a的乙個逆序對。求陣列中逆序對個數,很簡單的思路是每個數和後面的數比較,這樣需要 n 2 的時間,如果採用歸併排序的思想最壞情況下需要o nlgn 1.分解a low.mid 和a mid 1.high 2.求解 3.合併,陣列a low.mid...

逆序對的個數

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 100000000 include include include include includeusing names...