首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子
阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子
admin
2016-11-11
70
问题
阅读以下说明和C代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】
对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。函数quicksort(int a[],int n)实现了快速排序,其中,n个整数构成的待排序列保存在数组元素a[0]~a[n一1]中。
【C代码】
#include
Void quicksort(int a[], int n)
{
int i,j;
int pivot=a[0]; //设置基准值
i=0;j=n一1;
while (i<j){
while(i<j&&___________(1)) j--; //大于基准值者保持在原位置
if (i<j) { a
=a[j];i++;)
while(i<j&&__________(2)) i++; //不大于基准值者保持在原位置
if (i<j) {a[j]=a
;j--;}
}
a
=pivot; //基准元素归位
if(i>1)
___________(3); //递归地对左子序列进行快速排序
if(n—i一1>1)
___________(4); //递归地对右子序列进行快速排序
}
int main()
{
int i,arr[]={23,56,9,75,18,42,11,67);
quicksort(___________(5)); //调用quicksort对数组arr[]进行排序
for(i=0;i
printf("%d\t",arr
);
return 0;
}
选项
答案
(1)a[j]>pivot 或a[j]>=pivot或等价形式 (2)a[i]<=pivot或a[i]<pivot 或等价形式 (3)quicksort(a,i)或quicksort(a,j)或等价形式 (4)quicksort(a+i+l,n一i一1) 或quicksort(a+j+1,n一j一1) 或等价形式 注:a+i+1可表示为&a[i+1],a+j+1可表示为&a[j+1] (5)arr,sizeof(arr)/sizeof(int) 注:sizeof(arr)/sizeof(int)可替换为8
解析
本题考查C程序设计基本技能及快速排序算法的实现。
题目要求在阅读理解代码说明的前提下完善代码,该题目中的主要考查点为运算逻辑和函数调用的参数处理。
程序中实现快速排序的函数为quicksort,根据该函数定义的首部,第一个参数为数组参数,其实质是指针,调用时应给出数组名或数组中某个元素的地址;第二个参数为整型参数,作用为说明数组中待排序列(或子序列)的长度。
快速排序主要通过划分来实现排序。根据说明,先设置待排序列(或子序列,存储在数组中)的第一个元素值为基准值。划分时首先从后往前扫描,即在序列后端找出比基准值小或相等的元素后将其移到前端,再从前往后扫描,即在序列前端找出比基准值大的元素后将其移动到后端,直到找出基准值在序列中的最终排序位置。再结合注释,空(1)处应填入“a[j]>pivot”,使得比基准值大者保持在序列后端。空(2)处应填入“a
<=pivot”,使得不大于基准值者保持在前端。
在完成1次划分后,基准元素被放入a
,那么分出来的左子序列由a[0]~a[i一1]这i个元素构成,右子序列由a[i+1]~a[n-1]构成,接下来应递归地对左、右子序列进行快排。
因此,结合注释,空(3)应填入“quicksort(a,i)”或其等价形式,以对左子序列的i个元素进行快排,也可以用&a[0]代替其中的a,它们是等价的,a与&a[0]都表示数组的起始地址。
空(4)所在代码实现对右子序列进行快排。右子序列由a[i+1]~a[n—1]构成,其元素个数为n一1一(i+1)+1,即n一i一1,显然元素a[i+1]的地址为&a[i+1]或a+i+1,所以空(4)应填入“quicksort(a+i+1,n—i一1)”或其等价形式。
在main函数中,空(5)所在代码首次调用函数quicksort对main函数中的数组arr进行快排,因此应填入“arr,sizeof(arr)/sizeof(int)”或其等价形式。
转载请注明原文地址:https://kaotiyun.com/show/g9jZ777K
本试题收录于:
程序员下午应用技术考试题库软考初级分类
0
程序员下午应用技术考试
软考初级
相关试题推荐
Access数据库属于______数据库。
在Word的编辑状态下,先后新建了两个文档,但并没有对这两个文档做“保存”或“另存为”操作,则______。
用普通电话线拨号上网,必须有的一个关键设备是(15)。
用户为将修改的文档以不同文件名存储,可用______命令。
OSI七层模型中,提供面向用户连接服务的是______。
某公司下设4个分公司A、B、C、D,上月各分公司的销售额及其在总公司所占比例如下表所示。由于此表单受潮,有些数据看不清了,但还可以推算出来。根据推算, D公司上月的销售额为(68)万元。
某工厂信息处理技术员设计了如下统计表:该表设计中包含的问题以及改进方法是______。
在Access中,查询“学生”数据表的所有记录及字段的SQL语句是______。
对同一事物进行多次测量所得的结果可能不一致,这是幽测量误差所致。利用______可使误差基本抵消。
自然数1,2,3,4,5中,任意两个数都可以算出平均值,其中有些平均值是相同的。那么,不同的平均值共有______个。
随机试题
下列选项中,关于组织变革程序的说法,正确的是()。
A.糖皮质激素B.细胞毒药物C.两者均是D.两者均不是初治的微小病变型肾病应选用
下列各项中符合急性出血坏死性胰腺炎特征性表现的有
患者,男,60岁。因乏力、疲倦半年,低热、纳差1个月来诊。查体:轻度贫血貌,颈部可扪及多个蚕豆大小淋巴结,质硬,无压痛,脾肋下2cm。检测WBC48×109/L,Hb81g/L,PLT125×109/L;分类中性粒细胞0.22,淋巴细胞0.75,单核细胞0
某甲白酒生产厂生产的“玉龙”米酒在本地区范围内名气较大。不久,某乙白酒生产厂推出“西风”米酒,其酒瓶外观形状、瓶贴标签图样及色彩几乎与“玉龙”米酒一样,只是使用的商标、商品生产厂名厂址及商品名称不同。对此,下列表述正确的是()。
无论何种保险合同,都必须以保险利益的存在为前提,而保险标的是产生保险利益的前提。()
张某是某公司的新任人力资源部经理,他希望能够立即在公司开展工作分析,他的这一想法也得到了公司领导的支持。张某参考有关书籍编制了一些问卷,发放给员工填写,但是填写的质量不高。从操作工人和技术人员那里得到的关于其工作的信息,与从他们的直接上级那里得到的大不相同
银行支票结算业务中,收、付款单位不在同一银行开户,收款单位开户行根据票据交换收妥的支票办理转账,应借记()。
2000年4月13日,平安机械厂与光明钢铁公司,订立了一份购销合同。光明公司从平安厂购买应用于M设备的部件三套,每套单价1000元。因为平安厂生产的部件不能完全符合M设备的要求,故光明公司要求平安厂按其提供的图纸进行生产,平安厂同意,并在合同中注明这一点。
Myers在1979年提出了一个重要观点,即软件测试的目的是为了______。A)证明程序正确B)查找程序错误C)改正程序错误D)验证程序无错误
最新回复
(
0
)