問題描述:
給定一組數字或者輸入一組數字,如{13,2,5,6,7,4},求這組數字的逆序對數量。
首先逆序對的定義:
解決辦法:
1.最基礎最容易理解的算法就是採用循環。從數字的第一個數據開始向後遍歷,碰到逆序就累加。最後輸出逆序對。時間複雜度爲O(n^2)。其實是可以改進的。
優點是好寫,容易理解。
缺點是時間複雜度太高。
2.考慮冒泡排序和直接插入排序。冒泡排序和直接插入排序的一個共同特點就是,每次遍歷僅能消去一個逆序對。因此也可以考慮採用直接插入排序來計算逆序對。直接插入排序的時間複雜度最壞也是O(N^2)。
3採用歸併排序。時間複雜度約爲O(nlogn)。由於是歸併排序,還需要額外的O(N)的空間。
主要思想就是將待求的數組分成兩個等長的數組,分別求兩個數組的逆序,再求整個的逆序對。