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

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

A.Θ(n)
B.Θ(lgn)
C.Θ(nlgn)
D.Θ(n2)

参考答案

参考解析
解析:本题考查数据结构基础知识。快速排序一种分治的排序方法,其思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。快速排序的每一趟结果都是找到一个基准元素放置于线性表中部位置,将原来的线性表划分为前后两部分,前部分元素都小于基准元素,后部分元素都大于基准元素。快速排序总的关键字比较次数为Θ(nlog2n),最坏情况下时间复杂度为Θ(n2),最好情况下的时间复杂度为Θ(nlog2n);快速排序是不稳定的排序。最坏情况下需要的栈空间为Θ(n),其他需要Θ(nlog2n)。根据以上描述,本题依次选C、D选项。
更多 “在n个数的数组中确定其第i(1≤i≤n)小的数时,可以采用快速排序算法中的划分思想,对n个元素划分,先确定第k小的数,根据i和k的大小关系,进一步处理,最终得到第i小的数。划分过程中,最佳的基准元素选择的方法是选择待划分数组的(64)元素。此时,算法在最坏情况下的时间复杂度为(不考虑所有元素均相等的情况)(65)。A.Θ(n) B.Θ(lgn) C.Θ(nlgn) D.Θ(n2)” 相关考题
考题 在有n个无序无重复元素值的数组中查找第i小的数的算法描述如下:任意取一个元素r,用划分操作确定其在数组中的位置,假设元素r为第k小的数。若i等于k,则返回该元素值;若i小于k,则在划分的前半部分递归进行划分操作找第i小的数;否则在划分的后半部分递归进行划分操作找第k-i小的数。该算法是一种基于()策略的算法。 A.分治B.动态规划C.贪心D.回溯

考题 ● 对具有n个元素的顺序表(采用顺序存储的线性表)进行 (40) 操作,其耗时与n的大小无关。(40)A.在第i(1≤i≤n)个元素之后插入一个新元素B.删除第i(1≤i≤n)个元素C.对顺序表中的元素进行排序D.访问第i(1≤i≤n)个元素的前驱和后继

考题 在下列对单链表进行的操作中,算法时间复杂度为O(n)的是()。 A、访问第i个元素的前驱(1B、在第i个元素之后插入一个新元素(1≤i≤n)C、删除第i个元素(1≤i≤n)D、对表中元素进行排序

考题 阅读下列说明、流程图和算法,将应填(n)处的字句写在对应栏内。[说明]下面的流程图(如图3所示)用N - S盒图形式描述了数组A中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于A[i],并且数组中下标小于i的元素的值均小于基准数,下标大于i的元素的值均大于基准数。设数组A的下界为 low,上界为high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以4为基准数的划分过程如下:[流程图][算法说明]将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数int p(int A[],int low,int hieh)实现了上述流程图的划分过程并返回基准数在数组A中的下标。递归函数void sort(int A[],int L,int H)的功能是实现数组A中元素的递增排序。[算法]void sort(int A[],int L,int H) {if (L<H) {k=p(A,L,R); //p()返回基准数在数组A中的下标sort((4)); //小于基准敷的元素排序sort((5)); //大于基准数的元素排序}}

考题 待排序数组是否能被较均匀地划分对快速排序的性能有重要影响,因此枢轴元素的选取非常重要。有人提出从待排序的数组元素中随机地取出一个元素作为枢轴元素。下面是随机化快速排序划分的伪代码——利用原有的快速排序的划分操作,请填充其中的空缺处。其中,RANDOM(i,j)表示随机取i到j之间的一个数,包括i和j。(2)随机化快速排序是否能够消除最坏情况的发生? (10)。(是或否)

考题 阅读下列说明、流程图和算法,将应填入(n)处的字句写在对应栏内。【流程图说明】下图所示的流程图5.3用N-S盒图形式描述了数组Array中的元素被划分的过程。其划分方法;以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于Array[i],并且数组中下标小于i的元素的值均小于基准数,下标大于i的元素的值均大于基准数。设数组A的下界为low,上界为high,数组中的元素互不相同。【算法说明】将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数int p(int Array[],int low,int high)实现了上述流程图的划分过程并返回基准数在数组Ar ray中的下标。递归函数void sort(int Array[],int L,int H)的功能是实现数组Array中元素的递增排序。【算法】void sort(int Array[],int L,int H){if (L<H) {k=p(Array,L,H);/*p()返回基准数在数组Array中的下标*/sort((4));/*小于基准数的元素排序*/sort((5));/*大于基准数的元素排序*/}}

考题 对具有n个元素的顺序表(采用顺序存储的线性表)进行( ) 操作,其耗时与n的大小无关。A.在第i(1≤i≤n)个元素之后插入一个新元素B.删除第i(1≤i≤n)个元素C.对顺序表中的元素进行排序D.访问第i(1≤i≤n)个元素的前驱和后继

考题 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 下面的程序利用快速排序中划分的思想在整数序列中找出第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; }

考题 快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了 (61) 算法设计策略。已知确定基准元素操作的时间复杂度为,则快速排序算法的最好和最坏情况下的时间复杂度为 (62) 。A.分治B.动态规划C.贪心D.回溯

考题 ●试题二阅读下列说明、流程图和算法,将应填入(n)处的字句写在答题纸的对应栏内。【说明】下面的流程图(如图3所示)用N-S盒图形式描述了数组A中的元素被划分的过程。其划分方法是:以数组中的第一个元素作为基准数,将小于基准数的元素向低下标端移动,而大于基准数的元素向高下标端移动。当划分结束时,基准数定位于A[i],并且数组中下标小于i的元素的值均小于基准数,下标大于i的元素的值均大于基准数。设数组A的下界为low,上界为high,数组中的元素互不相同。例如,对数组(4,2,8,3,6),以4为基准数的划分过程如下:【流程图】图3流程图【算法说明】将上述划分的思想进一步用于被划分出的数组的两部分,就可以对整个数组实现递增排序。设函数int p(int A[],int low,int high)实现了上述流程图的划分过程并返回基准数在数组A中的下标。递归函数void sort(int A[],int L,int H)的功能是实现数组A中元素的递增排序。【算法】void sort (int A[], int 1,int H){if ( LH){k=p(A,L,R);//p()返回基准数在数组A中的下标sort( (4) );//小于基准数的元素排序sort( (5) );//大于基准数的元素排序}}

考题 第二题 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。 【说明】 对n个元素进行简单选择排序的基本方法是:第一趟从第1个元素开始,在n个元素中选出最小者,将其交换至第一个位置,第二趟从第2个元素开始,在剩下的n-1个元素中选出最小者,将其交换至第二个位置,依此类推,第i趟从n-i+1个元素中选出最小元素,将其交换至第i个位置,通过n-1趟选择最终得到非递减排序的有序序列。 问题:2.1 【代码】 #include void selectSort(int data[ ],int n) //对 data[0]~data[n-1]中的n个整数按非递减有序的方式进行排列 { int i,j,k; int temp; for(i=0;i for(k=i,j=i+1;(1);(2)) //k表示data[i]~data[n-1]中最小元素的下标 if(data[j] if(k!=i) { //将本趟找出的最小元素与data[i]交换 temp=data[i]; (4) ;data[k]=temp; } } } int main() { int arr[ ]={79,85,93,65,44,70,100,57}; int i,m; m=sizeof(arr)/sizeof(int); //计算数组元素的个数,用m表示 (5); //调用selectSort对数组arr进行非递减排序 for((6);i printf(“%d\t”,arr[i]); printf(“\n”); return 0; }

考题 快速排序算法是,在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了 ( ) 算法设计策略。已知确定着基准元素操作的时间复杂度为O(n),则快速排序算法的最好和最坏情况下的时间复杂度为 (请作答此空) 。A.O(n)和O(nlgn) B.O(n)和O(n2) C.O(nlgn)和O(nlgn) D.O(nlgn)和O(n2)

考题 快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了(请作答此空)算法设计策略。已知确定基准元素操作的时间复杂度为Θ(n),则快速排序算法的最好和最坏情况下的时间复杂度为( )。A.分治 B.动态规划 C.贪心 D.回溯

考题 快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了( )算法设计策略。已知确定基准元素操作的时间复杂度为Θ(n),则快速排序算法的最好和最坏情况下的时间复杂度为(请作答此空)。

考题 阅读以下说明和代码,填补代码中的空缺,将解答填入答题纸的对应栏内。【说明】下面的程序利用快速排序中划分的思想在整数序列中找出第 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+l]、…、a[high]进行划分,最后将该基准值放入 a[i] (low≤i≤high),并 使得 a[low]、a[low+l]、,..、A[i-1]都小于或等于 a[i],而 a[i+l]、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 #include 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(ipivot)--j; a[i]=a[ j] While(ipivot)++i; a[ j]=a[i]}(2) ; //基准元素定位 return i;}Int findkthElem(int a[],int startIdx,int endIdx, int k){//整数序列存储在 a[startldx..endldx]中,查找并返回第 k 小的元素。if (startldxendIdx || kendIdx||k-1 if (loc==k-1) ∥找到第 k 小的元素return (3) ;if(k-l 小的元素}return 0;}

考题 快速排序算法是,在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了 (请作答此空) 算法设计策略。已知确定着基准元素操作的时间复杂度为O(n),则快速排序算法的最好和最坏情况下的时间复杂度为 ( ) 。A.分治 B.动态规划 C.贪心 D.回溯

考题 设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为()。

考题 快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了(61)算法设计策略。已知确定着基准元素操作的时间复杂度为O(n),则快速排序算法的最好和最坏情况下的时间复杂度为(62)。A.O(n)和O(nlgn) B.O(n)和O(n2) C.O(nlgn)和O(nlgn) D.O(nlgn)和O(n2)

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

考题 快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了()算法设计策略。A、分治B、动态规划C、贪心D、回溯

考题 在有n个无序无重复元素值的数组中查找第i小的数的算法描述如下:任意取一个元素r,用划分操作确定其在数组中的位置,假设元素r为第k小的数。若i等于k,则返回该元素值;若i小于k,则在划分的前半部分递归进行划分操作找第i小的数;否则在划分的后半部分递归进行划分操作找第k-i小的数。该算法是一种基于()策略的算法。A、分治B、动态规划C、贪心D、回溯

考题 在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n个元素进行划分,如何选择划分基准?下面()答案解释最合理。A、随机选择一个元素作为划分基准B、取子序列的第一个元素作为划分基准C、用中位数的中位数方法寻找划分基准D、以上皆可行。但不同方法,算法复杂度上界可能不同

考题 在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面()答案解释最合理。A、随机选择一个元素作为划分基准B、取子序列的第一个元素作为划分基准C、用中位数的中位数方法寻找划分基准D、以上皆可行。但不同方法,算法复杂度上界可能不同

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

考题 设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为()。A、O(n)B、O(nlog2n)C、O(1)D、O(n2)

考题 单选题在寻找n个元素中第k小元素问题中,如使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面()答案解释最合理。A 随机选择一个元素作为划分基准B 取子序列的第一个元素作为划分基准C 用中位数的中位数方法寻找划分基准D 以上皆可行。但不同方法,算法复杂度上界可能不同

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