设计求解下列问题的的类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;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

c语言中,总结穷举法适合求解的问题类型
1、穷举法的基本思路是把问题涉及的可能情况一一罗列出来,并且根据题目的条件和实际背景逐个作出判断,从中挑选出符合条件的解答。2、使用穷举法时,要恰当地设计变量,并且决定用哪些变量作为搜索的主线,以便穷举出所有可能情况。3、穷举一般使用循环结构,要注意循环的起点和终点,对可能的情况不能遗漏,...

关于数据结构的问题,用C语言描述
二叉树的概念、性质和存储结构,二叉树遍历的三种算法(递归与非递归),在三种基本遍历算法的基础上实现二叉树的其它算法,线索二叉树的概念和线索化算法以及线索化后的查找算法,最优二叉树的概念、构成和应用,树的概念和存储形式,树与森林的遍历算法及其与二叉树遍历算法的联系,树与森林和二叉树的转换。下面我们来看考...

C语言程序设计案例教程:习题解析与实验指导图书目录
1.1 C语言程序设计起步:介绍C语言的基本概念和语法。1.2 简单计算:通过实例解析基本的算术运算。1.3 判断与选择:讲解条件语句的使用。1.4 重复计算:介绍循环结构。1.5 用函数组织C语言程序:演示如何使用函数封装代码。第2章 基本算法策略 本章深入讨论基本算法策略,包括穷举、迭代与递推、递归...

设树采用孩子兄弟表示法存放,用类C语言设计算法计算树的高度。
采用递归求解,先求左子树的高度和右子树的高度,然后整棵树的高度就是两颗子树高度的最大值+1。假定叶子节点高度为0。代码如下:struct node { int val; struct node* left; struct node* right;};int height(struct node* root){ int h, lh, rh; if ( root == NULL) ...

史上最全面的C语言(算法入门篇)
这篇文章详细阐述了C语言中算法入门的基础知识。首先,强调了算法在程序中的核心地位,认为它是程序的灵魂,通过数据结构、算法、程序设计方法和语言工具的结合构成完整的程序。文章介绍了算法的概念,分为数值运算和非数值运算两大类,并通过实例说明了如何设计简单算法,如计算阶乘、筛选学生成绩、判断闰年...

简述计算机求解算法的过程
例如,对于上面寻找数组中的最大元素的线性搜索算法,其时间复杂度是O(n),空间复杂度是O(1),其中n是数组的长度。总的来说,计算机求解算法的过程是一个需要深入理解问题、设计合适的算法、实现算法并分析算法的过程。这个过程需要我们对问题、算法和编程语言有深入的理解。

计算机问题求解的过程
在问题定义明确之后,下一步是设计求解问题的算法。算法是一种明确、有序的步骤描述,用于将输入转化为期望的输出。算法设计通常涉及到选择合适的策略、数据结构,并考虑算法的时间复杂度和空间复杂度。以排序问题为例,我们可以选择冒泡排序、选择排序、插入排序等不同的算法。每种算法都有其特点和适用场景...

c语言程序设计怎样分析数据
程序=算法+数据结构+程序设计方法+语言工具和环境 这4个方面是一个程序涉及人员所应具备的知识。算法的概念 做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,就称为算法。计算机算法:计算机能够执行的算法。计算机算法可分为两大类:数值运算算法:求解数值;&...

对于算法类问题求解,下列说法正确的是()。
C.一般而言,算法类问题求解包括数学建模、算法策略设计、算法的数据结构与控制结构设计、算法的正确性与复杂性分析四个基本步骤 D.其它三个选项的说法都正确 正确答案:一般而言,算法类问题求解包括数学建模、算法策略设计、算法的数据结构与控制结构设计、算法的程序实现、算法的正确性与复杂性分析五个基本...

计算机基础课程有那些?
数据库系统原理:学习数据库管理系统的基本原理、设计方法和应用技术。这包括关系数据库、SQL语言、数据安全性等。软件工程:学习软件开发的全过程管理,包括需求分析、设计、编码、测试、维护等。这有助于培养学生的项目管理和团队协作能力。三、进阶专业知识 人工智能:学习人工智能的基本原理、算法和应用。

相似回答