算法导论习题7-6
题目:
考虑这样一种排序问题,即无法准确的知道等排序的各个数字到底是多大.对于其中的每个数字,我们只知道它落在实轴上的某个区间内.亦即,给定的 n 个形如[ai, bi ]的闭区间,其中ai,≤bi .算法的目标是对这些区间进行模糊排序(fuzzy-sort),亦即,产生各区间的一个排序<i1, i2, i3, i4,…in >,使得存在一个 cj ∈[ai, bi ],满足c1≤c2≤…≤cn .a)借用快排的划分思路,以某个元素为主元,把区域划分成三段,第一段都小于主元,第二段都等于主元
重点是划分,区间如果重叠的部分,就把它们看做是相等的,并提取公共部分继续划分
a.nodeb < b.nodea ==> a < b
a.nodea > b.nodeb ==> a > b
其它情况 ==> a = b
为了避免类似于(2,2) (7,7) (1,8)这样的情况,相等时要提取公因子,并更新主元(主元不一等是某个元素)
本代码采用面向对象思路对Node的操作进行了封装,Node.h对Node的操作进行了封装:
ReginSort.h实现了对数组区间进行模糊排序的功能,排序的依据是在排好序的数组的每一个区间中可以找到一个数字,这些数字为有序排列:
test.cpp对该算法进行了测试,所用的数组区间为随机产生,具有代表性