下面程序段的功能是( )。 int a[]={4,0,2,3,1},i,j,t; for(i=1;i<5;i++){ t=a[i];j=i-1; while(j>=0 && t>a[j]) { a[j+1]=a[j];j--;} a[j+1]=t; }[/i]
A: 将数组元素按从小到大排序
B: 将数组按从大到小排序
C: 按输入顺序排序
D: 按输入的逆序排序
A: 将数组元素按从小到大排序
B: 将数组按从大到小排序
C: 按输入顺序排序
D: 按输入的逆序排序
举一反三
- 补全下面代码段,使得它的功能是对数组a中的前N个数据进行非逆序排序(从小到大)。那横线处可以填的语句是( )for ( i = 1; i<N; i++) for( j = 0; (1) ; j++) if( (2) ) {int t = a[j]; a[j] = a[j+1]; a[j+1] = t; } A: (1) j<N-i (2) a[j] < a[j+1] B: (1) j<N-i (2) a[j] > a[j+1] C: (1) j<N-i-1 (2) a[j] < a[j+1] D: (1) j<N-i-1 (2) a[j] > a[j+1]
- 写输出结果#include "stdio.h"int binary(int x, int a[], int n){ int low=0,high=n-l,mid; while(low<=high) { mid=(low+high)/2; if(x>a[mid]) high=mid-l; else if(x<a[mid]) low=mid+l; else return(mid); } void main(){ static int a[]={4,0,2,3,1}; int i,t,j; for(i=1;i<5;i++) t=a[i]; j=i-l; while(j>=0 && t>a[j]) { a[j+1]=a[j]; j--;} a[j+1]=t; } printf("%d\n",binary(3,a,5)); }
- 如下代码是打擂台算法求最大值int a[5]={0,-2,4,5,1},i,j,t;for(i=0;i<5-1;i++){ for(j=0;j<5-1-i;j++) { if(a[j]>a[j+]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } }} A: 正确 B: 错误
- 针对如下三个实现矩阵求和的不同函数:int a[N][N];int sumA( int a[N][N] ){ int i, j; int sum = 0; for ( i = 0; i < N; i++ ) for ( j = 0; j < N; j++ ) sum += a[i][j]; return sum;}int sumB( int a[N][N] ){ int i, j; int sum = 0; for ( j = 0; j < N; j++ ) for ( i = 0; i < N; i++ ) sum += a[i][j]; return sum;}int sumC( int a[N][N] ){ int i, j; int sum = 0; for ( j = 0; j < N; j+=2 ) for ( i = 0; i < N; i+=2 ) sum += ( a[i][j] + a[i+1][j] + a[i][j+1] + a[i+1][j+1] ); return sum;}当N足够大的时候,三个函数的运行时间t1、t2、t3符合下列哪种情况?()[/i][/i][/i][/i] A: t1 > t2 > t3 B: t3 > t1 > t2 C: t2 > t3 > t1 D: t3 > t2 > t1
- 代码填空【快速排序的分区函数:以第1个元素为基准元素】 int swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } int partition(int a[], int p, int q) { int x = a[/i][/i]; int i = p, j; for(j = p + 1;j <= q; j++) { if(a[j]<=x) { i++; ______(1)________; } } _________(2)___________; return i; }