问答题

[说明]
快速排序是一种典型的分治算法。采用快速排序对数组A[p..r]排序的3个步骤如下。
1.分解:选择一个枢轴(pivot)元素划分数组。将数组A[p..r]划分为两个子数组(可能为空)A[p..q-1]和A[q+1..r],使得A[q]大于等于A[p..q-1]中的每个元素,小于A[q+1..r]中的每个元素。q的值在划分过程中计算。
2.递归求解:通过递归的调用快速排序,对子数组A[p..q-1]和A[q+1..r]分别排序。
3.合并:快速排序在原地排序,故无需合并操作。
1. [问题1]
下面是快速排序的伪代码,请将空缺处(1)~(3)的内容填写完整。伪代码中的主要变量说明如下。
A:待排序数组
p,r:数组元素下标,从p到r
q:划分的位置
x:枢轴元素
i:整型变量,用于描述数组下标。下标小于或等于i的元素的值,小于或等于枢轴元素的值
j:循环控制变量,表示数组元素下标

【参考答案】

[问题2]
这是一道考查快速排序算法时间复杂度的分析题。当每次能作均匀划分时,算法为最佳情况,此时时间复杂度可......

(↓↓↓ 点击下方‘点击查看答案’看完整答案 ↓↓↓)
热门 试题

问答题
[问题2] 这是一道要求读者掌握DFD父图与子图的平衡原则和输入 输出平衡原则的综合分析题。本题的解答思路如下。 ①根据DFD父图与子图的平衡原则和输入 输出平衡原则,通过比对图2-21和图2-22中所有输入数据流和输出数据流可知,如图2-22所示中与加工“1处理管理请求”相关的两条输入数据流和两条输出数据流都是正确的。其中,如图2-21所示中数据流“非法请求信息”在如图2-22所示中包含了“非法管理工作请求单”和“非法查询请求信息”两条子数据流。 ②由题干给出的关键信息“对于初次借书的读者,系统自动生成读者号,并与读者基本信息(姓名、单位和地址等)一起写入读者文件”可知,加工“3登记读者信息”将有一条“读者情况”数据流输出到数据存储“读者文件”,即加工3是用来登记读者信息,应该将登记的读者信息写入读者文件,因此,在如图2-22所示中这一“写入”的箭头方向画反了。这条改正后数据流的起点是“3 登记读者信息”,终点是“读者文件”,数据流名称是“读者情况”。其中,该数据流名称应综合考虑题干中关键信息“系统自动生成读者号,并与读者基本信息一起写入读者文件”,并从如图2-22所示中数据流“读者信息”、“读者情况”中得到启发。 ③由题干给出的关键信息“系统首先检查该读者号是否有效,若无效,则拒绝借书;若有效……”和“系统的信息查询功能主要包括读者信息查询和图书信息查询。其中读者信息查询可得到读者的基本信息及读者借阅图书的情况……”,并结合加工2的细化图(见图2-23)中加工“2.1读者信息查询”与数据存储“读者文件”之间数据流的箭头方向可知,加工“2处理查询请求”应该从数据存储“读者文件”中读出读者的信息,因此在如图2-22所示中这一“查询”的箭头画反了。这条改正后的数据流的起点是“读者文件”,终点是“2处理查询请求”,数据流名称是“读者情况”。其中,该数据流名称可从图2-22所示中加工“2处理查询请求”的输出数据流“读者情况”中得到启发。