试题查看

首页 > 软件水平考试 > 试题查看
【分析解答题】

【说明】下面是一个用C编写的快速排序算法。为了避免最坏情况,取基准记录pivot时,采用从left、right和mid=[(left+right)/2]中取中间值,并交换到right位置的办法。数组a存放待排序的一组记录,数据类型为T,left和right是待排序子区间的最左端点和最右端点。void quicksort (int a[], int left, int right) { int temp; if (left<right) { hat pivot = median3 (a, left, right); //三者取中子程序 int i = left, j = right-1; for(;;){ while (i <j && a[i] < pivot) i++; while (i <j && pivot < a[j]) j--; if(i<j){ temp = a[i]; a[j] = a[i]; a[i] = temp; i++; j--; } else break; }if (a[i] > pivot) {temp = a[i]; a[i] = a[right]; a[right] = temp;}quicksort({{U}} (1) {{/U}}); //递归排序左子区间quieksort(a,i+1 ,right); //递归排序右子区间 }}void median3 (int a[], int left, int right){ int mid={{U}} (2) {{/U}}; int k = left; if(a[mid] < a[k])k = mid; if(a[high] < a[k]) k = high; //选最小记录 int temp = a[k]; a[k] = a[left]; a[left] = temp; //最小者交换到 left if(a[mid] < a[right]) {temp=a[mid]; a[mid]=a[right]; a[right]=temp;}}消去第二个递归调用 quicksort (a,i+1,right)。 采用循环的办法:void quicksort (int a[], int left, int right) {int temp; int i,j;{{U}} (3) {{/U}}{ int pivot = median3(a, left, right); //三者取中子程序 i = left; j = righi-1; for (;; ){ while (i<j && a[i] < pivot)i++; while (i<j && pivot <a[j]) j--; if(i <j) { temp = a[i]; a[j]; = a[i]; a[i]=temp; i++; j--; } else break;} if(a[i]>pivot){{{U}} (4) {{/U}};a[i]=pivot;} quicksoft ({{U}} (5) {{/U}});//递归排序左子区间 left = i+1; } }

查看答案解析

参考答案:

正在加载...

答案解析

正在加载...

根据网考网移动考试中心的统计,该试题:

0%的考友选择了A选项

0%的考友选择了B选项

0%的考友选择了C选项

0%的考友选择了D选项

你可能感兴趣的试题

阅读下列说明,回答问题1~问题4。【说明】某超市的销售业务由一个销售业务管理系统阅读下列说明以及图示(如图1所示),回答问题1~3。【说明】某大学准备开发一个学阅读下列说明,回答问题1~问题4。【说明】某超市的销售业务由一个销售业务管理系统阅读以下说明和流程图,回答问题1至问题3,将解答写在对应栏内。【说明】(1)流程阅读以下说明,回答问题1至问题3,将解答写在对应栏内。【说明】有如下关系数据库:【说明】本程序将两个从小到大的有序链表合成一个新的从小到大的有序链表。链表的每一