【归并排序】-求逆序数算法
生活随笔
收集整理的這篇文章主要介紹了
【归并排序】-求逆序数算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.歸并排序
- 歸并排序是分治法的一種典型應用,應用遞歸思想,自頂向下思考:先假定MergeSort()可以將一個亂序數組排好序,因此可以開始分(將一個數組平均分成兩部分),再治(分別調用MergeSort()使前后兩部分有序),最后使用Merge()將兩個有序數組合并為一個有序數組。
- Merge()方法實現簡單,只需管理兩個指針,分別指向待合并的兩個數組,開辟輔助數組保存中間結果,O(n)時間復雜度即可完成
2.逆序數
- 逆序數的定義:如果i < j且A[i] > A[j].則A[i]和A[j]即為逆序數對.逆序數對的個數就叫逆序數
- 求逆序數可以通過管理兩個指針,兩次掃描數組,蠻力法求出,顯然時間復雜度是Θ(n^2).
- 利用歸并排序法,稍做改進即可.在Merge()中,合并兩個已經有序的數組A,B.因為A.B有序,所以,A,B各自的逆序數是0,所以AB的逆序數等于A,B之間的逆序數.
- 舉個例子: A=1,4,6,7,9 ,B=2,3,5,10,13,21.在Merge中發現當前i號元素4比2大,那么4的逆序數需要+1,又因6,7,9都排在4后面,那么6,7,9的逆序數也應該+1,所以總體的逆序數應該加上last-i+1.
總結
以上是生活随笔為你收集整理的【归并排序】-求逆序数算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java基础:HashMap的用法
- 下一篇: 微信好友特征数据分析及可视化