首页 > 试题广场 >

设一组初始关键字记录关键字为(20,15,14,18,21,

[单选题]

设一组初始关键字记录关键字为(2015141821364010),则以20为基准记录的一趟快速排序结束后的结果为(  )

  • 10,15,14,18,20,36,40,21
  • 10,15,14,18,20,40,36,21
  • 10,15,14,20,18,40,36,2l
  • 15,10,14,18,20,36,40,21
第一次 关键字 )(20 15 14 18 21 36 40 10)
第二次(从后向前找小于20的值并交换)(10 15 14 18 21 36 40 20)
第三次( 从前向后找大于20的值并交换 (10 15 14 18 20 36 40 21)
若还有满足二三条件的接着交换,直到退出。
发表于 2017-06-29 10:38:58 回复(0)
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
这道题中一组初始关键字记录关键字为 (20 15 14 18 21 36 40 10) ,则以 20 为基准记录的一趟快速排序结束后的结果为 (  )
初初始 i=0, j=7, key=20
10 15 14 18 21 36 40 20   // 第三步
10 15 14 18 20 36 40 ,21    // 第四步

发表于 2017-06-27 22:40:41 回复(1)
这个有点不一样,和书本上讲的,。。
这里是两边的扫描同时进行,从左到右扫描时越过小于基数20的,找大于等于的即第一个20
从右向左扫描找小于的,越过大于等于的,即最后一个10,又因为l<r 所以10和20交换位置。,此时是10,15,14,18,21,36,40,20
转1再进行扫描
从左到右扫描到21,从右往左应该是18,(这里不同他扫描在了20,)才有了交换,合乎答案。 求解为什么???

发表于 2019-02-06 16:38:19 回复(0)
快排的一次划分:
key只是用来举例子

l指向最前面那个数字,h指向最后面那个数字.然后先选择基准为最前面那个数字。

key等于基准,先从后往前,当遇上h位置的数字小于基准时,把它赋给l,然后l从前往后走,当遇到l比基准大的数字就赋给h位置,然后继续循环,当l与h相碰上时,就把基准放进那个位置。

发表于 2019-08-22 19:26:14 回复(0)
问的是一趟,一趟结束的条件是指针相遇
发表于 2018-10-17 23:01:34 回复(0)
快速排序: 关键点:枢轴、low、high. 1.定好枢轴值,low指向首元,high指向 末元; 2.首先拿high指向的值与枢轴值进行比较,若其大于枢轴值,则high指针前移,继续比较(由于要将整个序列排成从小到大,所以后边不允许存在比枢轴值更小的元素);若其小于枢轴值,则将当前high值赋到low的值,同时操作转到low指针;对于low指针,和high类似,不同的是low指针是遇见比枢轴值大的值则进行赋值和“转换方向操作”(即转到high指针进行与枢轴值的比较)。 3.直到low与high指向同一元素,则将枢轴值赋到指向的这一元素;至此一趟快排结束。 注意:这样只是一趟快排结束。并不是最终排好序的结果。
发表于 2018-05-12 17:22:58 回复(0)
第一躺变化情况为:
20 15 14 18 21 36 40 10
10 15 14 18 21 36 40 10
10 15 14 18 21 36 40 21
10 15 14 18 20 36 40 21
选A。
发表于 2017-06-28 02:00:11 回复(0)