要求:借鑑歸併排序的演算法,在歸併的過程中,統計逆序對的個數,並記錄下具體的逆序對。設計乙個分治演算法,並用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...