设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,初始步长为4的希尔(shell)排序一趟的结果是
时间: 2023-09-16 09:12:53 浏览: 682
希尔排序是一种改进的插入排序算法,其核心思想是将待排序序列分成若干个子序列,分别进行插入排序,然后逐步缩小子序列的长度,最终使整个序列有序。初始步长为4的希尔排序一趟的结果如下:
首先,将序列分成4个子序列,分别为(Q, P, M, D)、(H, A, S, F)、(C, Y, R, X)、(A)
对这4个子序列分别进行插入排序,得到新的子序列:
(D, P, M, Q)、(A, F, H, S)、(C, R, X, Y)、(A)
将这4个子序列合并成一个新的序列,得到(D, P, M, Q, A, F, H, S, C, R, X, Y)
因此,希尔排序一趟的结果是(D, P, M, Q, A, F, H, S, C, R, X, Y)。
相关问题
设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,经过一次快速排序的结果是?
快速排序的基本思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后对这两部分记录继续进行排序,以达到整个序列有序的目的。
以本题中的序列为例,我们可以选取最后一个元素 X 作为枢轴元素。然后将序列中小于 X 的元素移到 X 的左边,大于 X 的元素移到 X 的右边,得到以下序列:
(Q, H, C, Y, P, A, M, S, R, D, F, X)
|
pivot
经过一次分割后,枢轴元素 X 的位置已经确定,且左边的元素均小于 X,右边的元素均大于 X。接下来,我们可以递归地对左右两部分进行快速排序。
对左边的部分(Q, H, C, Y, P, A, M, S, R, D, F)进行快速排序,选取最后一个元素 F 作为枢轴元素,得到以下序列:
(C, A, D, F, Q, H, M, S, R, P, Y)
|
pivot
对右边的部分(X)进行快速排序,此时只有一个元素,也就是已经有序了。
最终得到的有序序列为:
(A, C, D, F, H, M, P, Q, R, S, X, Y)
设要将序列(Q, H, C, Y, P, A, M, S, R, D, F, X)中的关键码按字母序的升序重新排列,经过一次快速排序一趟扫描的结果是(采用初始数据为支点,两头交替逼近的实现方法)的结果是?
快速排序的一趟扫描过程中,是将待排序序列中小于支点的元素移到支点左边,大于支点的元素移到支点右边,最终将支点放置在它的最终位置上。
以本题中的序列为例,我们取初始支点为序列第一个元素 Q。左指针指向序列第二个元素 H,右指针指向序列最后一个元素 X。
首先,从右指针开始向左扫描,找到第一个小于支点的元素 F,将 F 和支点 Q 交换位置,得到序列(F, H, C, Y, P, A, M, S, R, D, Q, X)。此时,左指针仍指向 H,右指针指向元素 X。
接着,从左指针开始向右扫描,找到第一个大于支点的元素 S,将 S 和右指针指向的元素 X 交换位置,得到序列(F, H, C, Y, P, A, M, S, R, D, Q, X)。此时,左指针指向元素 C,右指针指向元素 R。
继续从右指针开始向左扫描,找到第一个小于支点的元素 D,将 D 和支点 Q 交换位置,得到序列(F, H, C, Y, P, A, M, D, R, S, Q, X)。此时,左指针指向元素 C,右指针指向元素 S。
继续从左指针开始向右扫描,找到第一个大于支点的元素 R,将 R 和右指针指向的元素 S 交换位置,得到序列(F, H, C, Y, P, A, M, D, R, S, Q, X)。此时,左指针指向元素 Y,右指针指向元素 Q。
继续从右指针开始向左扫描,找到第一个小于支点的元素 A,将 A 和支点 Q 交换位置,得到序列(F, H, C, A, P, Y, M, D, R, S, Q, X)。此时,左指针指向元素 Y,右指针指向元素 S。
由于左指针和右指针相遇,扫描结束。此时,支点 Q 已经在序列中的正确位置上,且左边的元素均小于 Q,右边的元素均大于 Q。
一趟扫描后的序列为(F, H, C, A, P, Y, M, D, R, S, Q, X)。
阅读全文