[HackerRank]Merge Sort Counting Inversions

这篇博客回顾了Merge Sort算法,强调了其分治思想和在排序过程中如何有效地合并已排序段。通过详细解释,指出在解决特定问题时,冒泡法可能导致超时,而应关注如何统计元素交换(inversions)的次数。提供了实现Merge Sort的伪代码,并给出了完整程序的参考链接。
摘要由CSDN通过智能技术生成

Merge Sort: Counting Inversions

这道题设定了一个情景,但其实是让我们复习merge sort。那么我们就来复习一下merge sort。

Merge sort的思想是先把数组分段,递归进行mergesort,再合并起来。有一个细节,在合并的过程中,可以借助合并的两段都是sort好的数列,利用这一特性合并起来会较快一些。送上伪代码:

MergeSort(arr[], l,  r)
If r > l
     1. Find the middle point to divide the array into two halves:  
             middle m = (l+r)/2
     2. Call mergeSort for first half:   
             Call mergeSort(arr, l, m)
     3. Call mergeSort for second half:
             Call mergeSort(arr, m+1, r)
     4. Merge the two halves sorted in step 2 and 3:
             Call merge(arr, l, m, r)

我最开始merge的时候采用了冒泡法,因为这道题要我们统计swap的次数,但这样会timeout。如果不采用冒泡法的话,要统计swap的次数,想法就是观察后半数组的数字,记录每个数字要往前挪动多少位置。

完整的程序如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值