采用快速排序方法对关键字序列{265,301,751,129,937,863,742,694,076,438}进行升序排序,写出
采用快速排序方法对关键字序列{265,301,751,129,937,863,742,694,076,438}进行升序排序,写出其每趟排序结束后的关键字序列。
【正确答案】:
初始态:[265 301 751 129 937 863 742 694 076 438]
第一趟:[076 129] 265 [751 937 863 742 694 301 438]
第二趟:076 [129] 265 [438 301 694 742] 751 [863 937]
第三趟:076 129 265 [301] 438 [694 742] 751 863 [937]
第四趟:076 129 265 438 694 [742] 751 863 937
第五趟:076 129 265 438 694 742 751 863 937
【题目解析】:
快速排序基本思想:在n个记录中取某一个记录的键值为标准,通常取第一个记录键值为基准,通过一趟排序将待排的记录分为小于或等于这个键值和大于这个键值的两个独立的部分,这时一部分的记录键值均比另一部分记录的键值小,然后,对这两部分记录继续分别进行快速排序,以达到整个序列有序。
一趟快速排序的具体做法:附设两个指针i和j,它们的初值分别为265和438,且把第一个记录键值265为基准,送入工作单元x中保存。首先j从末尾起逐渐前移找到第一个满足小于265的记录,即076,这时将,076与265交换位置;然后令i自i+1起逐渐增大找到第一个满足大于265的记录,即301,这时将,265与301交换位置;接着j自j-l起重复上述过程,直至i=j,此时i便是记录x所应在的位置,至此,一趟快速排序完成。具体过程如下:
初始状态:265 301 751 129 937 863 742 694 076 438
交换一次:076 301 751 129 937 863 742 694 265 438
交换两次:076 265 751 129 937 863 742 694 301 438
交换三次:076 129 751 265 937 863 742 694 301 438
完成一趟:[076 129] 265 [751 937 863 742 694 301 438]
同理得出第二、三、四、五趟排序结果。
