现在的位置: 首页 > 综合 > 正文

快速排序

2013年06月20日 ⁄ 综合 ⁄ 共 506字 ⁄ 字号 评论关闭

        快速排序可以看成对冒泡排序的一种改进。基本思想是:通过一趟排序将待排序列分为两部分,其中一部分的值均比另一部分的值要小,然后分别对这两部分继续进行排序。

        算法过程举例说明如下,假设输入为:

8 1 4 9 6 3 5 2 7 0

        (1) 用三数中值分割法取一个pivot。从头、中间、尾取3个数分别为8, 6, 0, 中值为6,即选6为pivot。

        (2) 将序列分割为{小于6的数}, 6, {大于6的数}三部分

        将pivot与最后的元素交换使得枢纽元离开要分割的数据段。

8 1 4 9 0 3 5 2 7 6
i






j pivot

        向右移动i直到指向的值大于pivot,向左移动j直到指向的值小于pivot。如果i在j的左边,则将这两个元素互换。

2 1 4 9 0 3 5 8 7 6
i





j
pivot

        重复该过程直到i与j彼此交错为止。

        最后,将pivot与i所指的元素交换。

        (3) 分别对{小于pivot部分}和{大于pivot部分}进行第(2)步的分割。

        这个明显是递归了,递归要注意终止条件。

        如果移动i, j的过程中遇到了等于pivot的值怎么办?最好的选择是让i和j停止移动,否则运行时间将可能达到O(N^2)。

抱歉!评论已关闭.