关于快速排序第一次扫描后的结果关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX请问这个结果对吗,能否简单说明一下原因.

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/20 04:03:07
关于快速排序第一次扫描后的结果关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX请问这个结果对吗,能否简单说明一下原因.

关于快速排序第一次扫描后的结果关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX请问这个结果对吗,能否简单说明一下原因.
关于快速排序第一次扫描后的结果
关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX
请问这个结果对吗,能否简单说明一下原因.

关于快速排序第一次扫描后的结果关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX请问这个结果对吗,能否简单说明一下原因.
假设 i 为从左到右扫描的下标,j 为从右向左扫描的下标,则扫描的代码如下:
int partition(char key[], int left, int right)
{
    char &pivot = key[left];  // 第一个元素为分界
    int i = left+1, j = right;
    
    while(true) {
        /* 向左扫描,找到首个大于 pivot 的关键码 */
        while(i < right && key[i] <= pivot)
            i++;
        /* 向右扫描,找到首个小于等于 pivot 的关键码 */
        while(j > left && key[j] > pivot)
            j++;
                 
        if(i < j)
            swap(a[i], a[j]);
        else
            break;
    }
    swap(pivot, a[j]);  // 交换后 key[left..j-1] <= key[j] < key[j+1..right]
    return j;
}
根据以上代码可知,交换的过程为:
Q  H  C  Y  Q  A  M  S  R D  F  X
0   1   2  3   4  5   6   7  8  9 10 11


(1)i = 3,j = 10,需要交换,得到 :
Q  H  C  F  Q  A  M  S  R D  Y  X
0   1   2  3   4  5   6   7  8  9 10 11


(2)i = 7,j = 9,需要交换,得到:
Q  H  C  F  Q  A  M  D  R S  Y  X
0   1   2  3   4  5   6   7  8  9 10 11


(3)i = 8,j = 7,退出循环,将 pivot 与 key[j] 交换,得到:
D  H  C  F  Q  A  M  Q  R S  Y  X
0   1   2  3   4  5   6   7  8  9 10 11


这个结果与你所说的有差异,不知道是不是扫描方法造成的.

关于快速排序第一次扫描后的结果关键码序列(Q,H,C,Y,Q,A,M,S,R,D,F,X),若采用以第一个元素为分界元素的快速排序法,则扫描一趟的结果是FHCDQAMQRSYX请问这个结果对吗,能否简单说明一下原因. 设要将序列(83,40,63,13,84,35,96)中的关键码按升序重新排列.则分别写出简单选择排序、直接插入、希尔排序、冒泡排序、快速排序、二路归并排序的第一趟结果. 快速排序法问题设待排关键码序列为(25,18,9,33,67,82,53,95,12,70),要按关键码值递增的顺序进行排序,采取以第一个关键码为分界元素的快速排序法,第一趟完成后关键码33被放到了第___个位置.希 关于关键码排序,快速排序的题目,解题思路是什么啊! 关键码序列 66 13 51 76 81 26 57 69 23 要按关键码递增的顺序排列 若采用快速排序法并以第一个 元素为划分基准 那么 第一趟划分结果为 C语言中 关于快速排序法的题目:关键码序列:(66,13,51,76,81,26,57,69,23)按照递增顺序排序,采用快速序法,并以第一个元素划分的基准,那么第一趟划分后的结果是? 给定一个关键字序列(24,19,32,43,38,6,13,22),进行快速排序,扫描一趟后的结果是? shell排序法是怎么实现?有关键码(16,9,4,25,15,2,13,18,17,5,8,24)递增次序,接下..用初始增量为4的shell排序法,一趟扫描后的结果为? 假定对元素序列(7,3,5,9,1,12,8,15)进行快速排序,则进行第一次划分后,得到的元素序列是什么 设有关键码序列(66,13,51,76,81,26,57,69,23)要按关键码递增次序排序,采用快速排序法,以第一个元素为基准,第一趟划分的结果是什么,麻烦讲下具体过程. 已知正整数序列7,11,5,3,9,4,10,2,8,1,6用快速排序法进行排序,给出第一次排序的序列 数据序列 2 1 4 9 8 10 6 20 只可能是下列哪一种排序排2趟后的结果? 答案是快速 怎么看出来的?数据序列 2 1 4 9 8 10 6 20 只可能是下列哪一种排序排2趟后的结果?答案是快速 怎么看出来的? 采用快速排序算法,对关键字序列(28,56,78,60,12,25)按从小到大次序排序,写出第一趟,第二趟的排序结果 对序列{8,3,1,7,6,5,2,4}排序,要求排升序,用快速排序算法进行排序的各趟结果~ 待排序的关键码序列为(15,20,9,30,67,65,45,90)要按关键码值递增的顺序排序,采取简单选项排序法,第一趟排序后关键码15被放到第()个位置.A 2 B 3 C 4 D 5 怎么算? 关于关键码排序快速排序法,解题思路是什么啊~比如说:设有关键码(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分 我觉得26应该在66的左边,答案是不是错了设有关键码序列(66,13,51,76,81,26,57,69,23),要按关键码值递增的次序排序,并以第一个元素为划分的基准,那么第一趟划分后的结果为?答案是23,13,51,57,66,26 若给定的关键码集合为{20,15,14,18,21,36,40,10},写出经过一趟快速排序的结果.