单选题对n个元素从小到大排序,已将它们分成了n/k组,每组k个数。而且每组中的所有数都大于前一组的所有数。那么采用基于比较的排序,时间下界是()。AO(nlogn)BO(nlogk)CO(klogn)DO(klogk)

单选题
对n个元素从小到大排序,已将它们分成了n/k组,每组k个数。而且每组中的所有数都大于前一组的所有数。那么采用基于比较的排序,时间下界是()。
A

O(nlogn)

B

O(nlogk)

C

O(klogn)

D

O(klogk)


参考解析

解析: 暂无解析

相关考题:

● 对于具有n 个元素的一个数据序列,若只得到其中第 k 个元素之前的部分排序, 最好采用(59) ,使用分治 (Divide and Conquer )策略的是(60) 算法。(59)A. 希尔排序 B. 直接插入排序 C. 快速排序 D. 堆排序(60)A. 冒泡排序 B. 插入排序 C. 快速排序 D. 堆排序

对于具有n个元素的一个数据序列,若只需得到其中第k个元素之前的部分排序,最好采用(59),使用分治(Divide and Conquer)策略的是(60)算法。A.希尔排序B.直接插入排序C.快速排序D.堆排序

海明校验码是在n个数据位之外增设k个校验位,从而形成一个k+n位的新的码字,使新的码字的码距比较均匀地拉大。n与k的关系是( )。A.2k-1≥n+kB.2n-1≤n+kC.n=kD.n-l≤k

:有A、B两组数,每组数都按一定的规律排列着,并且每组都各有25个数。A组数中前几个是这样排列的1,6,11,16,21…;8组数中最后几个是这样排列的…,105,110,115,120,125。那么,A、B这两组数中所有数的和是( )。A.1525B.1625C.3075D.3150

通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。 A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等

请编写函数fun(),它的功能是:求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在 9所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:include <conio.h>include <stdio.h>void fun(int *a,int *n){}main( ){int aa[1000],n,k;clrscr();fun(aa,an);for(k=0;k<n;k++)if((k+1)%10==0){printf("%5d",aa[k]);printf("\n"); /*—行写10个数*/}elseprintf("%5d",aa[k]);}

阅读下列说明和流程图,将应填入(n)处的语句写在对应栏内。【说明】下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按从小到大的顺序排列,M是给定的常数。【流程图】此流程图1中,比较“K(I)+K(J):M”最少执行次数约为(5)。

请编写函数fun(),它的功能是:求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在 a所指的数组中,通过n返回这些数的个数。注意:部分源程序给出如下。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。试题程序:include <conio.h>include <stdio.h>void fun (int *a,int *n){}main(){int aa[1000], n, k;clrscr();fun(aa,n);for(k=0;k if((k+1)%10==0){printf("%5d",aa[k]);printf("\n");} /*一行写9个数*/elseprintf("%5d ",aa[k]);}

假设有一维数组T[O...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m)中,即B[1]=T[0],B[2]=T[n],依此类推,那么放入B[k](1≤k≤n)的元素是(120)。A.T[(K-1)*m]B.T[K*n)C.T[(K-1)*n]D.T[K*m]

下面算法是实现对n个整数的序列进行选择排序,其中序列的“长度”n为问题的规模。该算法的时间复杂度为(11)。 void select_sort(int a[],int n){ //将a中整数序列重新排列成从小到大有序的整数序列 for(i=0;i<n-1;++i){ j=i; for(k=i+1;k<n;++k)if(a[k]<a[j])j=k; if(j!=i){w=a[j];a[j];a[i];a[i]=w} )//select_sortA.O(n2)B.O(n3)C.O(n4)D.O(n)

对于n个元素的关键字序列K1,K2,…,Kn,若有Ki≤K2i≤且Ki≤2i+1(i=1,2,…,[n/2],2i+1≤n),则称其为小根堆。以下关于小根堆及其元素关系的叙述中,错误的是( )。A.关键字序列K1,K2,…,Kn呈非递减排序时一定为小根堆B.小根堆中的序列K1,K2,K4…,K2j(2j≤n)一定为非递减序列C.小根堆中元素K2i与K2i+1(2i≤n,2i+1≤n)之间的大小关系不能确定D.小根堆的最后一个元素一定是序列的最大元素

对于具有n个元素的一个数据序列,若只需得到其中第k个元素之前的部分排序,最好采用(63)。A.堆排序B.希尔排序C.快速排序D.直接插入排序

已知有一维数组T[0...m*n-1],其中m>n。从数组T的第一个元素(T[0])开始,每隔n个元素取出一个元素依次存入数组B[1...m]中,即B[1]=T[0],B[2)= T[n],依次类推,那么放入B[k](1≤k≤m)的元素是______。A.T[(k-1)*n]B.T[k*n]C.T[(k-1)*m]D.T[k*m]

阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面的程序利用快速排序中划分的思想在整数序列中找出第k小的元素(即将元素从小到大排序后,取第k个元素)。 对一个整数序列进行快速排序的方法是:在待排序的整数序列中取第一个数作为基准值,然后根据基准值进行划分,从而将待排序的序列划分为不大于基准值者(称为左子序列)和大于基准值者(称为右子序列),然后再对左子序列和右子序列分别进行快速排序,最终得到非递减的有序序列。 例如,整数序列19, 12, 30, 11,7,53, 78, 25的第3小元素为12。整数序列19,12,7,30,11,11,7,53,78,25,7的第3小元素为7。 函数partition(int a[ ], int low,int high)以a[low]的值为基准,对a[low]、a[low+1]、、 a[high]进行划分,最后将该基准值放入a[i] (lowihigh),并使得a[low]、a[low+1]、,..、 A[i-1]都小于或等于a[i],而a[i+1]、a[i+2]、..、a[high]都大于a[i]。 函教findkthElem(int a[],int startIdx,int endIdx,inr k)在a[startIdx]、a[startIdx+1]、...、a[endIdx]中找出第k小的元素。【代码】 include stdio.h include stdlib.h Int partition(int a [ ],int low, int high) {//对 a[low..high]进行划分,使得a[low..i]中的元素都不大于a[i+1..high]中的元素。 int pivot=a[low]; //pivot表示基准元素 Int i=low,j=high; while(( 1) ){ While(ija[j]pivot)--j; a[i]=a[j] While(ija[i]=pivot)++i; a[j]=a[i] } (2) ; //基准元素定位 return i; } Int findkthElem(int a[ ],int startIdx,int endIdx, int k) {//整数序列存储在a[startldx..endldx]中,查找并返回第k小的元素。 if (startldx0 ||endIdx0 || startIdxendIdx || k1 ||k-1endIdx ||k-1startIdx) Return-1; //参数错误 if(startIdxendldx){ int loc=partition(a, startIdx, endldx); ∥进行划分,确定基准元素的位置 if (loc==k-1) ∥找到第k小的元素 return (3) ; if(k-1 loc) //继续在基准元素之前查找 return findkthElem(a, (4) ,k); else //继续在基准元素之后查找 return findkthElem(a, (5) ,k); } return a[startIdx]; } int main() { int i, k; int n; int a[] = {19, 12, 7, 30, 11, 11, 7, 53, 78, 25, 7}; n= sizeof(a)/sizeof(int) //计算序列中的元素个数 for (k=1;k<n+1;k++){ for(i=0;i<n;i++){ printf(%d/t,a[i]); } printf(\n); printf(elem %d=%d\n,k,findkthElem(a,0,n-1,k));//输出序列中第k小的元素 } return 0; }

下面程序的功能是 : 将 N 行 N 列二维数组中每一行的元素进行排序 , 第 0 行从小到大排序 , 第 1 行从大到小排序,第 2 行从小到大排序,第 3 行从大到小排序,例如:define N 4void sort(int a[][N]){ int i, j, k, t;for (i=0; iN;i++)for (j=0; jN-1:j++)for (k= 【 13 】 ; kN;K++)/* 判断行下标是否为偶数来确定按升序或降序来排序 */if ( 【 14 】 ? a[i][j]a[i][k]); a[i][j]a[i][k]){ t = a[i][j];a[i][j]=a[i][k];a[i][k] = t;}}void outarr(int a[N][N]){ …… }main(){ int aa[N][N]={{2,3,4,1},{8,6,5,7},{11,12,10,9},{15,14,16,13}};outarr(aa); /* 以矩阵的形式输出二维数组 */sort(aa);outarr(aa);}

●试题一阅读下列说明和流程图,将应填入(n)处的语句写在答题纸的对应栏内。【说明】下列流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按从小到大的顺序排列,M是给定的常数。【流程图】此流程图1中,比较"K(I)+K(J)∶M"最少执行次数约为 (5) 。图1

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]函数int psort(int a[],int n)实现将含n个整数的数组a[]的不同元素按从小到大顺序存于数组a[]中。实现方法是从未确定的元素列中找到最小元素并将a[]的第i最小元素交换至a[i]位置。如该最小元素比已确定的最后一个最小元素大,则将它接在已确定的元素序列的后面;否则,忽视该元素。[C函数]int psort(int a[],int n){int i,J,k,P;for(i=0,k=0;i<(1);i++){for(j=i+1, (2) ;j<n; j++)if(a[p]>a[j])p=j;if(p!=i){t=a[p];a[p]=a[i];a[i]=t;}if( (3) ) k++;else if( (4) <a[i])(5)=a[i];}return k;}int a[]={5,7,5,6,4,3,4,6,7};main(){int k,n;for(k=0;k<(Sizeof a)/Sizeof(int);k++)printf("%5d",a[k]);printf ("\n\n");n=psort(a,(sizeof(a))/sizeof(int));for(k=0;k<n;k++)printf("%5d",a[k]);printf("\n\n");}

下面是一个对整数数组A中的前n个元素求最小值的C程序,函数返回最小元素的位置。 Int minValue(int A[],int n){ int k=0: for(int j=1;j<=n-1;j++) if(A[j]<a[k])k=j; return k: 当n=4时,程序中可能的执行路径数为______。A.2B.4C.8D.16

通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )A.数据元素具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等

在n个数的数组中确定其第i(1≤i≤n)小的数时,可以采用快速排序算法中的划分思想,对n个元素划分,先确定第k小的数,根据i和k的大小关系,进一步处理,最终得到第i小的数。划分过程中,最佳的基准元素选择的方法是选择待划分数组的(64)元素。此时,算法在最坏情况下的时间复杂度为(不考虑所有元素均相等的情况)(65)。A.Θ(n)B.Θ(lgn)C.Θ(nlgn)D.Θ(n2)

对n个元素从小到大排序,已将它们分成了n/k组,每组k个数。而且每组中的所有数都大于前一组的所有数。那么采用基于比较的排序,时间下界是()。A、O(nlogn)B、O(nlogk)C、O(klogn)D、O(klogk)

通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。A、数据元素具有同一特点B、不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致C、每个数据元素都一样D、数据元素所包含的数据项的个数要相等

给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,请设计一个最坏时间复杂度为O(n)的算法,并对其时间复杂度进行分析说明。

N个数采用冒泡排序,从小到大排序共需要进行()轮排序A、NB、N+1C、N-1D、(1+N)/2

下列各组辅音中,发音部位相同的一组是()A、[k,]B、[m,n]C、[n,]D、[k,p]

单选题已知待排序的n个元素可分为nk个组,每个组包含k个元素,且任一组内的各元素均分别大于前一组内的所有元素和小于后一组内的所有元素,若采用基于比较的排序,其时间下界应为( )。AO(nlog₂n)BO(nlog₂k)CO(klog₂n)DO(klog₂k)

单选题通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。A数据元素具有同一特点B不仅数据元素所包含的数据项的个数要相同,而且对应的数据项的类型要一致C每个数据元素都一样D数据元素所包含的数据项的个数要相等

问答题给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,请设计一个最坏时间复杂度为O(n)的算法,并对其时间复杂度进行分析说明。