【Big data】Odd even merge sort

Odd-even merge sort也是一种基于merge思想的排序算法。

对于merge类型的算法,只要知道如何merge,就知道如何排序。首先看odd-even merge。

假设现有x1,...,n和y1,...yn两个有序的数组,那么把x分成xodd和xeven两部分,也就是下标时奇数和偶数两部分,y同理,然后递归merge xodd和yodd,递归merge xeven和yeven,假设结果分别为z1=a1,a2,....和z2=b1,b2,.....,做一次shuffle,即逐一取z1中的一个再取z2中的一个得到a1,b1,a2,b2,......an,bn. 最后做一次compare-exchange,即b1,a2做调整,b2,a3做调整。。。merge结束。

所以整个排序过程大致为:

sort(x){

if base case;

sort(x1);

sort(x2);

merge(x1,x2);

}

merge(x1,x2){

if base case;

merge(x.odd,y.odd);

merge(x.even,y.even);

}

证明排序算法有效:

lemma:0-1定理,如果一个排序算法可以对任意的01序列排序,那么也可以对任意数字排序。

只需要证明merge部分即可。假设x中0的个数为n1,y中的0的个数为n2。那么z1中的0的个数为ceil(n1/2) + ceil(n2/2),z2中为floor(n1/2) + floor(n2/2),二者的差至多为2。下面分类讨论:

(1)如果差为0,那么最后exchange以后就是0000.。。。00011111.。。。。。111 , 有序。

(2)如果差为1,那么最后exchange以后仍然是有序,

(3)差为2,那么是0000...000...0101...1111...exchange会让第一个10交换,最终有序。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值