有一组数字[38,27,43,3,9,82,10],我们要对齐进行排序。我们可以采取分治策略。
分治,顾名思义就是分而治之,一分为二,直到最小。
我们用上图来说明,比如 有
[38,27,43,3,9,82,10] 对半分成:[38,27,43,3]和[9,82,10],然后继续对半分,直到分成只有一个数字,38 27 43 3 9 82 10
然后两两比较,小的在前大的在后,变成:
27 38 3 43 9 82 10
再通过合并的方法,找到左右两个已经排好序的列表比如 [27,38]和[3,43] 从最左边开始逐一比较
先:27 和 3 比较 3 小 放入新的空列表中 [3]
再:27 和 43 比较 27小 放入列表中 [3,27]
继续:38 和 43 比较 38小 放入列表中 [3,27,38]
最后:[3,27,38,43] ,然后继续和其它列表比较
注意:函数merge_sort中调用了自己merge_sort,这种叫做递归算法。就是自己得出的结果再被自己进一步处理,一直到得出最终结果。分治和递归经常是形影相伴。
留言与评论(共有 0 条评论) “” |