假设有一队小学生,大部分个子高矮不同(也有部分完全相同的)
需要按身高排序时,
① 以队列中某一个人的身高为基准,比如中间的人 120cm
② 升序检查、从第1人开始向后找到大于等于这个值的位置;如 115,118,123……时,找到第3人
降序检查、从最后1人开始向前找到小于等于这个值的位置。如 ……117,131,128,124时,找到倒数第4人
③ 把这两个位置的内容进行交换。
(原始:115,118,123……120……117,131,128,124)
(变成:115,118,117……120……123,131,128,124)
④ 重复②、③直至升序和降序的检查位置交叉相遇时停止。
此时,队列中所有比基准值t大的值都到了这个位置的后面,而比基准值小的都到了这个位置的前面。
例如: 115,118,117,109,119,……120……131,127,123,131,128,124
这其中,上半区都小于等于120、下半区都大于等于120。这样就完成了一次递归排序
大家一看就明白,接下来,只要把上半区按更小的基准如 117进行同样的分级排序、同时,对下半区按更大的基准如123进行同样的分级排序即可。
这样不断缩小分区,最后就能得到所有队列的从小到大排序。
接下来的具体过程是:接着开始分段递归
⑤ 以此位置拆分为2个队列,按递归算法依次、分别对2个队列进行上述①-⑤的递归排序计算,
直至最小队列无需排序时退回上一层递归……继续上一层剩余的队列的递归排序计算。
就这样,很快就能完成所有的高矮交换。
呵呵。
|