#JC1050. 快速排序

快速排序

一、单项选择题(每题2分,共20分)

1、快速排序的核心思想是?() {{ select(1) }}

  • 相邻两两比较交换元素
  • 选定基准值,小于基准放左侧,大于基准放右侧,递归处理子区间
  • 每次从未排序区选出最小元素放到前面
  • 将元素插入到前面有序序列的合适位置

2、快速排序实现依靠什么编程思想?() {{ select(2) }}

  • 贪心
  • 枚举
  • 递归
  • 二分答案

3、快速排序自定义函数中,递归出口条件是?() {{ select(3) }}

  • if(left >= right) return;
  • if(left == 0) return;
  • if(right == 0) return;
  • if(left+right>0) return;

4、升序快速排序,j指针移动规则描述正确的是?() {{ select(4) }}

  • j从左向右,遇到比基准大就停止
  • j从右向左,a[j]>=x就继续左移,遇到小于基准值停止
  • j固定不动,只移动i指针
  • j遇到任何元素都直接移动到最左端

5、在一次划分完成后,基准值会放在什么位置?() {{ select(5) }}

  • 数组最开头
  • 数组最末尾
  • i与j重合的下标位置
  • left下标处

6、快速排序属于哪一类排序(稳定性)?() {{ select(6) }}

  • 稳定排序
  • 不稳定排序
  • 一定完全稳定
  • 只有整数才稳定

7、想要把快速排序由升序改成降序,需要修改哪里的判断条件?() {{ select(7) }}

  • 只修改递归出口
  • 修改while循环里面a[j]、a[i]和基准x的比较条件
  • 修改数组定义类型
  • 修改函数返回值类型

8、有序列4 9 5 6,基准值选4做升序一次划分,划分结束后基准值4的位置为?() {{ select(8) }}

  • 数组下标最左边
  • 数组下标最右边
  • 第二个下标
  • 中间下标

9、下面哪个不属于稳定排序算法?() {{ select(9) }}

  • 冒泡排序
  • 插入排序
  • 快速排序
  • 桶排序

10、“结果最大”拼接数字题,快速排序比较两个数字采用什么方式比较大小?() {{ select(10) }}

  • 直接比较数字数值大小
  • 将数字转为字符串,比较拼接之后的字符串大小
  • 直接比较数字位数
  • 数字大的一定排在前面

二、判断题(每题2分,共10分)

11、快速排序一次划分结束后,基准元素已经处于它最终的正确有序位置。() {{ select(11) }}

  • 正确
  • 错误

12、快速排序递归调用,划分完成后需要递归处理qsort(left,i‑1)处理左区间,qsort(i+1,right)处理右区间。() {{ select(12) }}

  • 正确
  • 错误

13、稳定排序的含义:排序之后原来相等元素的相对先后顺序保持不变。() {{ select(13) }}

  • 正确
  • 错误

14、快速排序中,i、j指针没有重合的时候,就可以把基准值直接存入数组。() {{ select(14) }}

  • 正确
  • 错误

15、降序快排,大于基准值的元素放到左边,小于基准值的放到右边。() {{ select(15) }}

  • 正确
  • 错误