单选题对n个元素值分别为-1、0或1的整型数组A进行升序排序的算法描述如下:统计A中-1、0和1的个数,设分别为n1、n2和n3,然后将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n3个元素赋值为1。该算法的时间复杂度和空间复杂度分别为()。AΘ(n)和Θ(1)BΘ(n)和Θ(n)CΘ(n2)和Θ(1)DΘ(n2)和Θ(n)

单选题
对n个元素值分别为-1、0或1的整型数组A进行升序排序的算法描述如下:统计A中-1、0和1的个数,设分别为n1、n2和n3,然后将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n3个元素赋值为1。该算法的时间复杂度和空间复杂度分别为()。
A

Θ(n)和Θ(1)

B

Θ(n)和Θ(n)

C

Θ(n2)和Θ(1)

D

Θ(n2)和Θ(n)


参考解析

解析: 本题需要用3个辅助变量n1、n2和n3来保存数组A中-1、0和1的个数,空间复杂度为Θ(1)。在统计时,需要使用一循环语句遍历数组A。统计完成后,再使用一次循环语句遍历数组A,并将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n个元素赋值为1。数组A的元素个数为n,因此算法的时间复杂度为Θ(n)。

相关考题:

对n个元素值分别为-1、0或1的整型数组A进行升序排序的算法描述如下:统计A中-1、0和1的个数,设分别为n1、n2和n3,然后将A中的前n1个元素赋值为-1,第n1+1到n1+n2个元素赋值为0,最后n3个元素赋值为1。该算法的时间复杂度和空间复杂度分别为()。 A.(n)和(1)B.(n)和(n)C.(n2)和(1)D.(n2)和(n)

插入排序算法的主要思想是:每次从未排序序列中取出一个数据,插入到已排序序列中的正确位置,InsertSort 类的成员函数sort()实现了插入排序算法,请将画线处缺失的部分补充完整。class InsertSort{public:InsertSort(int*a0,int n0):a(a0),n(n0){}//参数组首地址,n 是数组元素个数void sort(){//此函数假设已排离序列初始化状态只包含a[0],未排序序列初始为a[1]?a[n-1]for (int i=1;iint j;for( [14] j0;--j){if(ta[j-1])break;a[j]=a[j-1];}a[j]=t;}}protected:int*a,n;//指针a 用于存放数组首地址,n 用于存放数组元素个数};

( 14 ) 插入排序算法的主要思想是 : 每次从未排序序列中取出一个数据 , 插入到已排序序列中的正确位置 。InsertSort 类的成员函数 sort() 实现了插入排序算法。请将画线处缺失的部分补充完整。class InsertSort{public:InsertSort(int* a0, int n0) :a(a0), n(n0) {} // 参数 a0 是某数组首地址, n 是数组元素个数void sort( ){// 此函数假设已排序序列初始化状态只包含 a[0] ,未排序序列初始为 a[1]...a[n-1]for (int i=1; iint t=a[i];int j;for ( 【 14 】 ; j0; --j){if (t=a[j-1]) break;a[j]=a[j-1];}a[j]=t;}}protected:int *a, n; // 指针 a 用于存放数组首地址, n 用于存放数组元素个数};

插入排序算法的主要思想是:每次从未排序序列中取出一个数据,插入已排序序列中的正确位置。Insert类的成员函数sort()实现了插入排序算法,请填空。class Insert{public:Insert(int*b0,int n0):b(b0),n(n0){};//参数b0是某数组首地址,n是数组元素个数void sort(){//此函数假设已排序序列初始化状态只包含b[0],未排序序列初始为b[1]…b[n-1]for(int i=1;i<n;++i){int t=b[i];int j;for(______;j>0;--j){if(t>=b[j-1])break;b[j]=b[j-1];b[j]=t;}}}};

用数组A[0,N-1]存放循环队列的元素值,若其头指针和尾指针分别为front和rear,则循环队列中当前元素的个数为A.(rear-front+N+1)mod NB.(rear-front+1)mod NC.(rear-front-1+N)mod ND.(rear-front)mod N

函数swap(a, n)可完成对a数组从第1个元素到第n个元素两两交换。其中b[0]=1;b[1]=2; swap(b, 2)。在运行调用函数中的语句后,b[0]和b[1]的值分别为( )。A.1,1B.1,2C.2,2D.2,1

两根长度、容重相同的悬挂杆横截面面积分别为A2和A1,设N1、N2、σ1、σ2分别为两杆中的最大轴力和应力,则()。 A.N1=N2、σ1=σ2B.N1≠N2、σ1=σ2C.N1=N2、σ1≠σ2D.N1≠N2、σ1≠σ2

设循环队列中数组的下标是0~N-1,其队头、队尾指针分别为f和r(f指向队首元素的前一位置,r指向队尾元素),则其元素个数为()。 A.r-fB.r-f-1C.(r-f)%N+1D.(r-f+N)%N

插入排序算法的主要思想是:每次从未排序序列中取出一个数据,插入到己排序序列中的正确位置。InsertSort类的成员函数sort()实现了插入排序算法。请将画线处缺失的部分补充完整。class InsertSort{public:InsertSort(int* a0,int n0):a(a0),n(n0){}//参数a0是某数组首地址,n是数组元素个数void sort(){//此函数假设已排序序列初始化状态只包含a[0],未排序序列初始为a[1]…a[n-1]for(int i=1;i<n;++i){int t=a[i];int j;for(【 】;j>0;--j){if(t>=a[j-1])break;a[j]=a[j-1];}a[j]==t;}}protected:int*a,n;//指针a用于存放数组首地址,n用于存放数组元素个数};

函数swap(arr,n)可完成对arr数组从第1个元素到第n个元素两两交换。在运行调用函数中的语句后,a[0]和a[1]的值分别为【 】。a[0]=1;a[1]=2;swap(a,2);

对n个基本有序的整数进行排序,若采用插入排序算法,则时间和空间复杂度分别为(62);若采用快速排序算法,则时间和空间复杂度分别为(63)。A.O(n2)和O(n)B.O(n)和O(n)C.O(n2)和O(1)D.O(n)和O(1)

阅读下列说明和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)。

在研究某--问题中使用F检验法,如果在显著性水平a=0. 05的水平下,统计量F大于临界值F0.95(n1,n2),则在a =0. 01水平下,可能的结论有( )。A.F > F0.99(n1,n2) B. F ≤ F0.99(n1,n2) C. F0.99(n1,n2)>F0.95(n1,n2)D. F0.99(n1,n2) 0.95(n1,n2)E. F= F0.99(n1,n2)

样本含量分别为n1和n2的两个小样本均数比较的t检验中,自由度等于A.n1 + n2 -2B.n1 - n2C.n1 + n2 -1D.n1 + n2E.(n1 + n2)/2

阅读下列说明和C代码,回答下列问题。[说明]?? ?采用归并排序对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代码]?? ?#inciude<stdio, h>?? ?#include<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" );?? ?exit11?? ?}?? ?If((right = (int *)malloc((n2+1) * sizeof(int)))=NULL)?? ?Perror("malloc error");?? ?exit 11;?? ?}?? ?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;______;k++){?? ?If(left[i]>right[j] {?? ?______?? ?j++;?? ?}else{?? ?arr[k1]=left[i];?? ?i++;?? ?}?? ?}?? ?}?? ?Void merge Sort(int arr[ ], int begin, int end) {?? ?int mid;?? ?if(______){?? ?mid=(begin + end)/2;?? ?merge Sort(arr,begin,mid);?? ?______;?? ?Merge(arr,begin,mid,end);?? ?}?? ?}

在双标准纬线等角圆锥投影中,n1、n2分别为标准纬线φ1和φ2处的纬线长度比,选项正确的是()。A:n1>1,n2<1B:n1<1,n2>1C:n1<0,n2>0D:n1=1,n2=1

设N1﹑N2分别为滚刀﹑工件每分钟转数,K﹑Z分别为滚刀﹑工件齿数,则滚齿的分齿运动式为()。A、A﹑N1/N2=K/ZB、B﹑N1*N2=K*ZC、C﹑N2/N1=K/ZD、D﹑N1/N2=K*Z

设普通对称式圆锥齿轮差速器壳的转速为n0,左右两半轴的转速分别为n1、n2,则汽车转弯时有()A、n1=n2=n0B、n1=n2=2n0C、n1=n2=0.5n0D、n1+n2=2n0

在AO*算法中,已知h(n)函数对一个与或图中各节点的假想估值如下:h(n0)=3,h(n1)=2,h(n2)=4,h(n3)=4,h(n4)=1,h(n5)=1,h(n6)=2,h(n7)=h(n8)=0(目标节点)。此外假设k-连接符的耗散值为k。开始时,初始节点n0,n0被扩展,生成出节点n1、n4和n5,一个1-连接符指向n1,一个2-连接符指向n4和n5。这两个连接符之间是"或"的关系。问指针将指向()A、n0的1-连接符B、n0的2-连接符C、n4D、n5

设对称式锥齿轮差速器壳的转速为n0,左、右两侧半轴齿轮的转速分别为n1和n2,则有()。A、n1+n2=n0B、n1+n2=2n0C、n1+n2=1/2n0D、n1=n2=n0

设对称式锥齿轮差速器壳的转速为n0,左、右两侧半轴齿轮的转速分别为n1和n2,则有()A、n1+n2=n0B、n1+n2=2nC、n1+n2=1/2n0D、n1=n2=n0

设对称式锥齿轮差速器壳的转速为n0,左、右两侧半轴齿轮的转速分别为n1和n2,则有()。A、n1+n2=n0B、n1+n2=2n0C、n1=n2=n0

单选题设对称式锥齿轮差速器壳的转速为n0,左、右两侧半轴齿轮的转速分别为n1和n2,则有()。An1+n2=n0Bn1+n2=2n0Cn1+n2=1/2n0Dn1=n2=n0

单选题有以下程序:#includemain(){ char *s=120119110; int n0,n1,n2,nn,i; n0=n1=n2=nn=i=0; do {  switch(s[i++])  {   default:nn++;   case '0':n0++;   case '1':n1++;   case '2':n2++;  } }while(s[i]); printf(n0=%d,n1=%d,n2=%d,nn=%d,n0,n1,n2,nn);}程序的运行结果是(  )。An0=3,n1=8,n2=9,nn=1Bn0=2,n1=5,n2=1,nn=1Cn0=2,n1=7,n2=10,nn=1Dn0=4,n1=8,n2=9,nn=1

单选题设普通对称式圆锥齿轮差速器壳的转速为n0,左右两半轴的转速分别为n1、n2,则汽车转弯时有()An1=n2=n0Bn1=n2=2n0Cn1=n2=0.5n0Dn1+n2=2n0

单选题设对称式锥齿轮差速器壳的转速为n0,左、右两侧半轴齿轮的转速分别为n1和n2,则有()An1+n2=n0Bn1+n2=2nCn1+n2=1/2n0Dn1=n2=n0

单选题设对称式锥齿轮差速器壳的转速为n0,左、右两侧半轴齿轮的转速分别为n1和n2,则有()。An1+n2=n0Bn1+n2=2n0Cn1=n2=n0