设计求解下列问题的的类C语言算法,并分析其最坏情况时间复杂性及其量级。 (数据结构导论的题目) 大家快来

(1)在数组A[1..n]中查找值为K的元素,若找到则输出其位置i(1≤i≤n),否则输出0作为标志.
(2)找出数组A[1..n]中元素的最大值和次最大值(本小趋同以数组元素的比较为标准操作)

(1)
void findEle(int[] a, int n, int key) {
for (int i=0; i<n; i ++) {
if (key == a[i]) {
printf( "%d\n", i+1);
return ;
}
}
printf("0\n");
return;
}
算法的复杂度为: O(n),最坏为n。
(2)
void findMaxMin(int a[], int n, int &max, int &maxNext) {
if (n ==0 || a == 0) return; //输入的数组为空
if (n==1) { max = maxNext = a[0]; return;} //数组的长度为1, max 和maxNext 都设为a[0]

if (a[1] > a[0] ) { max = a[1]; maxNext=a[0];}
else { max = a[0]; maxNext = a[1];}

for(int i=2; i<n; i ++) {
if (a[i] > max) {maxNext= max; max = a[i]; } //-----a
else if (a[i] > maxNext) { maxNext = a[i];}
}
return;
}

算法的复杂度: O(n). 最坏情况: 2n (当输入的数组是一个排好序的升序的数组时,循环的每一步都要执行语句a进行数据交换。追问

第一题处定义 int a[] ,你看看。第二题:int &max, int &maxNext 这种定义以前没见,是啥意思,还有第二题能再加点注释吗?本人愚,看的不是很明白。。谢谢,大侠。

追答

第一题中a的下标是从0到n-1的,如果要1-n改为:
void findEle(int[] a, int n, int key) {
for (int i=1; i a[1] ) { max = a[2]; maxNext=a[1];} //首先将max设置为a1和a2中最大的一个。
else { max = a[2]; maxNext = a[1];}

for(int i=3; i max) {maxNext= max; max = a[i]; } //如果a[i]大于max,那么maxNext置为当前的max, max置为a[i]
else if (a[i] > maxNext) { maxNext = a[i];} //如果 a[i] maxNext, 将maxNext置为a[i].
}
printf("max = %d, maxNext=%d\n", max, maxNext);
return;
}

温馨提示:答案为网友推荐,仅供参考
相似回答