● 归并排序采用的算法设计方法属于 (65) 。 (65)A. 归纳法 B. 分治法 C. 贪心法 D. 回溯方法
● 归并排序采用的算法设计方法属于 (65) 。
(65)
A. 归纳法
B. 分治法
C. 贪心法
D. 回溯方法
● 归并排序采用的算法设计方法属于 (65) 。
(65)
A. 归纳法
B. 分治法
C. 贪心法
D. 回溯方法
以关键字比较为基础的排序算法在最坏情况下的计算时间下界为O(nlogn)。下面的排序算法中,最坏情况下计算时间可以达到O(nlogn)的是(21),该算法采用的设计方法是(22)。
A.归并排序
B.插入排序
C.选择排序
D.冒泡排序
●将数组{1,1,2,4,7,5}从小到大排序,若采用(62)排序算法,则元素之间需要进行的比较次数最少,共需要进行(63)次元素之间的比较。
(62)A.直接插入
B.归并
C.堆
D.快速
(63)A. 5
B. 6
C. 7
D. 8
inciude<stdio.h> inciude<stdlib.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;i<n1;i++){ left[i]=arr[p+i]; } left[i]=MAX; for(i=0; i<n2; 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)。
将数组{1,1,2,4,7,5}从小到大排序,若采用(62)排序算法,则元素之间需要进行的比较次数最少,
A.直接插入
B.归并
C.堆
D.快速
若排序前后关键字相同的两个元素相对位置不变,则称该排序方法是稳定的。下列排序算法中,有(14)种排序算法是稳定的:归并排序、快速排序、希尔排序、堆排序、基数排序、直接插入排序、冒泡排序、直接选择排序。
A.3
B.4
C.5
D.6
快速排序算法采用的设计方法是______。
A.动态规划法
B.分治法
C.回溯法
D.分枝定界法
A.快速排序
B.插入排序
C.冒泡排序
D.归并排序