答: (1)以升序排序为例,给出快速排序的每一趟结果如下: ① 426,087,275,061,170,503,897,908,653,512; ② 170,087,275,061,426,503,512,653,897,908; ③ 061,087,170,275,426,503,512,653,897,908; ④ 061,087,170,275,426,503,512,653,897,908。 (2)以升序排序为例,给出归并排序的每一趟结果如下: ① 087,503,061,512,170,908,275,897,426,653; ② 061,087,503,512,170,275,897,908,426,653; ③ 061,087,170,275,503,512,897,908,426,653; ④ 061,087,170,275,426,503,512,653,897,908。 (3)以升序排序为例,给出堆排序的每一趟结果如下: ① 087,653,897,503,426,170,512,275,061,908; ② 061,653,512,503,426,170,087,275,897,908; ③ 061,503,512,275,426,170,087,653,897,908; ④ 087,503,170,275,426,061,512,653,897,908; ⑤ 061,426,170,275,087,503,512,653,897,908; ⑥ 087,275,170,061,426,503,512,653,897,908; ⑦ 061,087,170,275,426,503,512,653,897,908; ⑧ 061,087,170,275,426,503,512,653,897,908; ⑨ 061,087,170,275,426,503,512,653,897,908。
(1)快速排序通过多次的比较和交换来实现排序,以基准元素为中心,进行一趟快速排序,将待排序表分成两个子表,对左右子表各选取一个基准值进行划分,直到所有子表的长度为最小单位。一趟快速排序算法的过程为: ① 设置两个变量i、j,排序开始的时候:i=0、j=N-1(N为待划分的数组长度); ② 以第一个数组元素作为关键数据,赋值给key(基准值),即key=A[0]; ③ 从j开始向前搜索,找到第一个小于key的值A[j],将A[j]和A[i]的值进行交换; ④ 从i开始向后搜索,找到第一个大于key的值A[i],将A[i]和A[j]的值交换。重复③ ④步,直到i==j。 (2)归并的含义是将两个或两个以上的有序表合成一个新的有序表。二路归并排序的具体步骤为:假设初始序列含有n个记录,则可以看成n个有序的子记录,每个子记录的长度为1。然后两两归并,得到⎾n/2⏋个长度为2或为1的有序子序列;再两两归并,…,如此重复,直到得到一个长度为n的有序序列为止。 (3)堆排序的思想(以升序序列为例): ① 将待排序序列构造成一个大根堆; ② 此时序列中的最大值就是堆顶的根结点; ③ 将其与末尾进行交换,此时末尾就是最大值; ④ 然后将n-1个元素重新构造成一个堆,这样就会得到n个元素中的次小值,如此反复执行就会得到一个有序的升序序列。在构建大根堆的过程中,用来构建大根堆的元素逐渐减少,最后得到的就是有序序列了。 【考点】本题考查排序算法的应用。