网友您好, 请在下方输入框内输入要搜索的题目:

题目内容 (请给出正确答案)

F. 归并排序

{a为序列表,tmp为辅助数组}

procedure merge(var a:listtype; p,q,r:integer);

{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}

var I,j,t:integer;

tmp:listtype;


参考答案

更多 “ F. 归并排序{a为序列表,tmp为辅助数组}procedure merge(var a:listtype; p,q,r:integer);{将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}var I,j,t:integer;tmp:listtype; ” 相关考题
考题 对关键字序列{Q,H,C,Y,P,A,M,S,R,D,F,X},用下列()方法进行第一趟排序的结果为{F,H,C,D,P,A,M,Q,R,S,Y,X}。 A.直接插入排序B.二路归并排序C.以第一元素为基准的快速排序D.基数排序

考题 ( 14 ) 设有字符序列 ( Q 、 H 、 C 、 Y 、 P 、 A 、 M 、 S 、 R 、 D 、 F 、 X ) , 则新序列 ( H 、 C 、 Q 、 P 、 A 、 M 、 S 、R 、 D 、 F 、 X 、 Y )是下列哪一种排序算法一趟扫描的结果?A) 起泡排序B) 初始步长为 4 的希尔排序C) 二路归并排序D) 堆排序

考题 设有字符序列(Q,H,C,Y,P,A,M,S,R,D,F,x),则新序列(H,C,Q,P,A,M,S,R,D,F,X,Y)是下列哪一种排序算法一趟扫描的结果?A.起泡排序B.初始步长为4的希尔排序C.二路归并排序D.堆排序

考题 ● 设有字符序列(Q、H、C、Y、P、A、M、S、R、D、F、X),则新序列(H、C、Q、P、A、M、S、R、D、F、X、Y)是下列()排序算法一趟扫描的结果。()A. 起泡排序 B. 初始步长为4的希尔排序C. 二路归并排序 D. 堆排序

考题 阅读以下算法说明,根据要求回答问题1~问题3。[说明]快速排序是一种典型的分治算法。采用快速排序对数组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)~(3)的内容填写完整。伪代码中的主要变量说明如下。A:待排序数组p,r:数组元素下标,从p到rq:划分的位置x:枢轴元素i:整型变量,用于描述数组下标。下标小于或等于i的元素的值,小于或等于枢轴元素的值j:循环控制变量,表示数组元素下标

考题 设有字符序列(Q,H,C,Y,P,A,M,S,R,D,F,x),则新序列(F,H,C,D,P,A,M,Q,R,S,Y,x)是下列( )排序算法-趟扫描的结果。A.起泡排序B.初始步长为4的希尔排序C.二路归并排序D.以第一个元素为分界元素的快速排序

考题 设有字符序列(Q,H,C,Y,P,A, M, S, R, D, F, X),则新序列(F,H,C,D,P,A,M,Q,R,S,Y,X)是下列 ( )排序算法一趟扫描的结果。A.起泡排序B.初始步长为4的希尔(shell)排序C.二路归并排序D.以第一个元素为分界元素的快速排序

考题 设有字符序列(Q,H,C,.Y,P,A,M,S,R,D,F,X),问新序列(H,Q,C, Y,A,P,M,S,D,R,P,X)是下列哪一个排序算法一趟扫描的结果________。A.起泡排序B.初始步长为4的希尔排序C.以第一元素为分界元素的快速排序D.二路归并排序

考题 阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。 【说明】 采用归并排序对n个元素进行递增排序时,首先将n个元素的数组分成各含n/2个元素的两个子数组,然后用归并排序对两个子数组进行递归排序,最后合并两个已经排好序的子数组得到排序结果。 下面的C代码是对上述归并算法的实现,其中的常量和变量说明如下: arr:待排序数组 p,q,r:一个子数组的位置从p到q,另一个子数组的位置从q+1到r begin,end:待排序数组的起止位置 left,right:临时存放待合并的两个子数组 n1,n2:两个子数组的长度 i,j,k:循环变量 mid:临时变量 【C代码】inciudestdio.h inciudestdlib.h define MAX 65536 void merge(int arr[],int p,int q,int r) { int *left, *right; int n1,n2,i,j,k; n1=q-p+1; n2=r-q; if((left=(int*)malloc((n1+1)*sizeof(int)))=NULL) { perror(malloc error); exit(1); } if((right=(int*)malloc((n2+1)*sizeof(int)))=NULL) { perror(malloc error); exit(1); } for(i=0;in1;i++){ left[i]=arr[p+i]; } left[i]=MAX; for(i=0; in2; i++){ right[i]=arr[q+i+1] } right[i]=MAX; i=0; j=0; for(k=p; (1) ; k++) { if(left[i] right[j]) { (2) ; j++; }else { arr[k]=left[i]; i++; } } } void mergeSort(int arr[],int begin,int end){ int mid; if( (3) ){ mid=(begin+end)/2; mergeSort(arr,begin,mid); (4) ; merge(arr,begin,mid,end); } }【问题1】 根据以上说明和C代码,填充1-4。 【问题2】 根据题干说明和以上C代码,算法采用了(5)算法设计策略。 分析时间复杂度时,列出其递归式位(6),解出渐进时间复杂度为(7)(用O符号表示)。空间复杂度为(8)(用O符号表示)。 【问题3】 两个长度分别为n1和n2的已经排好序的子数组进行归并,根据上述C代码,则元素之间比较次数为(9)。