C语言常用算法程序汇总
- 格式:docx
- 大小:32.89 KB
- 文档页数:30
C程序经典算法50例1.二分查找算法:在有序数组中查找指定元素。
2.冒泡排序算法:通过不断比较相邻元素并交换位置,将较大的元素向后冒泡。
3.快速排序算法:通过选择一个基准元素,将数组分割为左右两部分,并递归地对两部分进行快速排序。
4.插入排序算法:将数组划分为已排序和未排序两部分,每次从未排序中选择一个元素插入到已排序的合适位置。
5.选择排序算法:遍历数组,每次选择最小元素并放置在已排序部分的末尾。
6.希尔排序算法:将数组按照一定间隔进行分组并分别进行插入排序,然后逐步减小间隔并重复这个过程。
7.归并排序算法:将数组递归地划分为两部分,然后将两个有序的部分进行合并。
8.桶排序算法:将元素根据特定的映射函数映射到不同的桶中,然后对每个桶分别进行排序。
9.计数排序算法:统计每个元素的出现次数,然后根据计数进行排序。
10.基数排序算法:从低位到高位依次对元素进行排序。
11.斐波那契数列算法:计算斐波那契数列的第n项。
12.阶乘算法:计算给定数字的阶乘。
13.排列问题算法:生成给定数组的全排列。
14.组合问题算法:生成给定数组的所有组合。
15.最大连续子序列和算法:找出给定数组中和最大的连续子序列。
16.最长递增子序列算法:找出给定数组中的最长递增子序列。
17.最长公共子序列算法:找出两个给定字符串的最长公共子序列。
18.最短路径算法:计算给定有向图的最短路径。
19.最小生成树算法:构建给定连通图的最小生成树。
20.汉诺塔算法:将n个圆盘从一个柱子移动到另一个柱子的问题。
21.BFS算法:广度优先算法,用于图的遍历和查找最短路径。
22.DFS算法:深度优先算法,用于图的遍历和查找连通分量。
23.KMP算法:字符串匹配算法,用于查找一个字符串是否在另一个字符串中出现。
24.贪心算法:每次都选择当前情况下最优的方案,适用于求解一些最优化问题。
25.动态规划算法:将一个大问题划分为多个子问题,并通过子问题的解求解整个问题,适用于求解一些最优化问题。
1.两个数对换:t=a;a=b;b=t;2.三个数比较大小(最大)if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}printf("%d",a);3.三个数排序(由小到大)if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%d",a,b,c);4.多个数找最大(小)值max=a[0];for(i=0;i<10;i++){if(a[i]>max)max=a[i];}printf("%d",max);5.累加(考虑求偶数和,3的倍数和等)long int s=0;int k;for(k=1;k<=1000;k++)s=s+k;6.累乘long int s=1;int k;for(k=1;k<=100;k++)s=s*k;正负倒换用f=f*(-1)7.素数一个数在[2,sqrt(x)]范围内没有因子,我们就称其为素数(质数)循环变量终值法#include<stdio.h>#include<math.h>void main(){int x,k;scanf("%d",&x);for(k=2;k<=sqrt(x);k++)if(x%k==0) break;if(k>sqrt(x))printf("%d is a prime",x);else printf("%d isn't a prime",x);}考虑输出300以内所有素数8.枚举法逐个检验每个解有多少无重复三位数?num=0;for(x=100;x<=999;x++){a=x/100;b=x/10%10;c=x%10;if(a/!=b&&a!=c&&b!=c)num++;}printf("%d",num);9.斐波那契数列输出前20项斐波那契数列void main(){long int f1=1,f2=1,f3;int k;printf("%d%d",f1,f2);for(k=3;k<=20;k++){f3=f1+f2;printf("%d",f3);f1=f2;f2=f3;}}考虑从第十项开始输出,以及与斐波那契数列有关的加减乘除10.求200以内被19整除的最大数for(x=200;x>=1;x--)if(x%19==0) break;printf("x=%d",x);11.逆序输出一个整数(考虑还有什么方法)long int y,n;scanf("%ld",&y);while(y!=0){n=y%10;printf("%ld",n);y=y/10;}考虑怎样输出该数为几位数12.逆序输出一个数组int i,a[10];for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=9;i>=0;i--)printf("%d",a[i]);13.冒泡排序(从小到大)n个数要比较n-1趟,而在第j趟比较中,要进行n-j次两两比较int a[8],i,j,t;for(i=0;i<8;i++)scanf("%d",&a[i]);for(j=0;j<7;j++)for(i=0;i<8-j;i++)if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}for(i=0;i<8;i++)printf(“%d",a[i]);14.选择法排序(从小到大)比出最小的放到最前面,下次比较跳过此数int a[8],i,j,t;for(i=0;i<8;i++)scanf("%d",&a[i]);for(j=0;j<7;j++)for(i=j+1;i<8;i++)if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}for(i=0;i<8;i++)printf("%d",a[i]);15.计字符串中字母、数字等的个数int a,b,c,d,i=0;char ch[80];gets(ch);while(ch[i]!='\0'){i++;if((ch[i]>='a'&&ch[i]<='z')||(ch[i]>='A'&&ch[i]<='Z')) a++;else if(ch[i]>='0'&&ch[i]<='9') b++;else if(ch[i]==' ') c++;else d++;}printf...。
C语言七大算法一、概述算法是计算机程序设计中解决问题的方法和步骤的描述,是计算机科学的重要基础。
在计算机科学中,有许多经典的算法被广泛应用,并成为不可或缺的工具。
本文将介绍C语言中的七大经典算法,包括排序算法、查找算法、图算法、字符串算法、动态规划算法、贪心算法和分治算法。
二、排序算法排序是将一组元素按照特定规则进行重新排列的过程。
常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。
这些排序算法在C语言中都有相应的实现,并且各有特点和适用场景。
三、查找算法查找算法用于在一组数据中查找特定值的位置或判断是否存在。
常见的查找算法有线性查找、二分查找、哈希查找等。
这些算法在C语言中的实现可以帮助我们快速地定位目标值。
四、图算法图算法用于解决与图相关的问题,包括最短路径问题、最小生成树问题、拓扑排序等。
在C语言中,我们可以利用图的邻接矩阵或邻接表来实现相关的图算法。
五、字符串算法字符串算法主要用于解决字符串匹配、替换、拼接等问题。
在C语言中,我们可以使用字符串库函数来完成一些基本的字符串操作,例如字符串比较、复制、连接等。
六、动态规划算法动态规划算法是解决一类最优化问题的常用方法,它将问题分解为多个子问题,并通过保存已解决子问题的结果来避免重复计算。
在C语言中,我们可以使用动态规划算法来解决背包问题、最长公共子序列问题等。
七、贪心算法贪心算法是一种通过每一步的局部最优选择来达到全局最优的方法。
贪心算法通常在解决最优化问题时使用,它快速、简单,并且可以给出近似最优解。
C语言中可以使用贪心算法来解决霍夫曼编码、最小生成树等问题。
八、分治算法分治算法是一种将问题分解为多个相同或类似的子问题然后递归解决的方法。
常见的分治算法有快速排序、归并排序等。
在C语言中,我们可以使用分治算法来提高程序的效率和性能。
总结:本文介绍了C语言中的七大经典算法,包括排序算法、查找算法、图算法、字符串算法、动态规划算法、贪心算法和分治算法。
C语言常用算法语句总结在C语言中,常用的算法语句有:1.条件语句:用于根据不同的条件执行不同的代码块。
- if语句:用于执行一个代码块,如果给定的条件为真。
- else语句:用于在if条件为假时执行一个代码块。
- else if语句:用于在多个条件中选择一个执行的代码块。
2.循环语句:用于重复执行一段代码。
- while循环:当给定条件为真时,重复执行一段代码。
- do-while循环:先执行一次代码,然后检查给定条件是否为真,如果为真则继续执行。
- for循环:在给定条件为真的情况下,重复执行一段代码。
3.跳转语句:用于在程序中跳转到指定的位置。
- break语句:用于跳出当前循环或开关语句。
- continue语句:跳过当前循环中的剩余代码,并开始下一次迭代。
4.数组与指针:用于存储和操作数据。
-数组:一种用于存储多个相同类型数据的集合。
-指针:保存变量的内存地址,使得可以间接访问或操作变量。
5.递归:函数调用自身的过程。
-递归函数:函数在其函数体内直接或间接地调用自己。
6.排序算法:-冒泡排序:通过重复遍历列表,比较相邻元素并交换顺序,将最大(或最小)元素逐步移动到列表的一端。
-选择排序:在每一次遍历中,找到最小(或最大)的元素并将其放置在当前位置。
-插入排序:将元素逐个插入已排序列表的适当位置,直到所有元素都插入为止。
-快速排序:通过选择一个基准元素,将列表分为两个子列表,一个小于基准元素,一个大于基准元素,然后对子列表进行递归排序。
以上是C语言中常用的算法语句总结,还有许多其他的算法和语句可以根据具体的需求使用。
C语⾔常⽤数值计算算法(素数、公约数、级数、⽅程根和定积分)素数判断#include<stdio.h>#include<math.h>int main(){int n,min,max,isprime;scanf("%d %d",&min,&max);if(min<=2){printf("%4d",2);min=3;}if(min%2==0)min++;for(n=min;n<=max;n+=2){for(isprime=1,i=2;t&&i<=sqrt(n);i++)if(n%i==0)isprime=0;if(isprime)printf("%4d",n);}return0;}最⼤公约数1.brute-force算法#include<stdio.h>int main(){int x=30,y=45,z;z=x;while(!(x%z==0&&y%z==0))z--;printf("%d",z);return0;}2.欧⼏⾥得算法#include<stdio.h>int main(){int x=35,y=45,r;while((r=x%y)!=0){x=y;y=r;}printf("%d",y);return0;}穷举法例解⽅程: ①x+y+z=100 ②5x+3y+z/3=100#include<stdio.h>int main(){int x,y,z;for(x=0;x<=20;x++)for(y=0;y<=33;y++)for(z=0;z<=100;z++)if(x+y+z==100&&5*x+3*y+z/3==100&&z%3==0)printf("x=%d,y=%d,z=%d\n");return0;}#include<stdio.h>int main(){int x,y,z;for(x=0;x<=20;x++)for(y=0;y<=33;y++){z=100-x-y;if(5*x+3*y+z/3==100&&z%3==0)printf("x=%d,y=%d,z=%d\n",x,y,z);}return0;}级数近似#include<stdio.h>#include<math.h>int main(){double s=1,a=1,x,eps;int n;scanf("%lf%lf",&x,&eps);for(n=2;fabs(a)>eps;n++){a=a*x/(n-1);s+=a;}printf("%f",s);return0;)#include<stdio.h>#include<math.h>int main(){double sum,x,eps=1e-6,fn,tn;int s=1,n=2;scanf("%lf",&x);s=fn=x;do{s=-s;fn=fn*(2*n-3)/(2*n-2)*x*x;tn=sign*fn/(2*n-1);sum=sum+tn;n++;}while(fabs(tn)>eps);printf("%f",sum);⼀元⾮线性⽅程求根⼀、⽜顿迭代法 1.基本概念:如果函数连续,且待求零点孤⽴,那么在零点周围存在⼀个区域,当初值在这个邻域内时,⽜顿法收敛。
pid算法温度控制c语言程序PID算法是一种常用的温度控制算法,广泛应用于各种温度控制系统中。
在C语言中,我们可以通过编写程序来实现PID算法的温度控制功能。
我们需要了解PID算法的基本原理。
PID算法是通过对系统的反馈信号进行不断调整,使得系统的输出达到期望值。
PID算法由三个部分组成:比例控制、积分控制和微分控制。
比例控制根据反馈信号与期望值的差异来调整输出;积分控制根据反馈信号与期望值的累积差异来调整输出;微分控制根据反馈信号的变化率来调整输出。
在C语言中,我们可以使用变量来表示系统的输入、输出和期望值。
以下是一个简单的示例代码:```c#include <stdio.h>// 定义PID参数float Kp = 1.0; // 比例系数float Ki = 0.5; // 积分系数float Kd = 0.2; // 微分系数// 定义系统变量float setpoint = 25.0; // 期望值float input = 0.0; // 输入值float output = 0.0; // 输出值// 定义误差变量float error = 0.0; // 当前误差float last_error = 0.0; // 上一次误差float integral = 0.0; // 累积误差// PID算法函数float pid_algorithm(float setpoint, float input) {// 计算误差error = setpoint - input;// 计算比例控制float proportional = Kp * error;// 计算积分控制integral += error;float integral_control = Ki * integral;// 计算微分控制float derivative = Kd * (error - last_error); // 计算输出output = proportional + integral_control + derivative;// 更新误差last_error = error;return output;}int main(){// 模拟温度传感器的输入input = 23.5;// 调用PID算法函数output = pid_algorithm(setpoint, input);// 打印输出结果printf("Output: %.2f\n", output);return 0;}```在上述代码中,我们首先定义了PID算法的参数和系统变量。
C语言常用算法1.整型数据的相关操作运算:十进制位的拆分、合并、左移、右移、位删除、位的累加、连乘等运算;进制数的编程转换、整型数与数字串的相互转换;整型数据的奇偶判断;整型数据间的公约数、公倍数计算,算术、关系、逻辑等运算;●题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h>void main(){int num1, num2;int a, b, t;printf("Please input two numbers : ");scanf("%d%d", &num1, &num2);a = num1,b = num2;if(a < b){t = a;a = b;b = t;}for( ;b != 0; ){t = a % b;a = b;b = t;}printf("\nmax common divisor is %d\n", a);printf("min common multiple is %d\n", num1 * num2 / a);}●题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#include<stdio.h>void main(){int num;int i, j, k;for (num = 100; num < 1000; num++){i = num % 10;j = num % 100 / 10;k = num / 100;if(num == i * i * i + j * j * j + k * k * k){printf("%4d", num);}}printf("\n");}●题目:将一个正整数分解质因数。
C语言基本算法C语言是一门用于编写计算机程序的高级编程语言,其特点是语法简洁、表达力强,广泛应用于科学计算、系统开发等领域。
在C语言中,算法是解决问题的关键,因此掌握基本算法对于学习和使用C语言非常重要。
本文将介绍C语言中一些简单级别的基本算法。
1.顺序查找算法顺序查找算法是一种简单的算法,用于在一个无序数组中查找目标元素。
它的基本思想是逐个比较数组中的元素,如果找到目标元素则返回其索引,否则返回-12.二分查找算法二分查找算法是一种高效的算法,用于在一个有序数组中查找目标元素。
它的基本思想是将数组分成两半,判断目标元素在哪一半中,然后再在该半中进行查找,如此循环直到找到目标元素或确定不存在。
3.冒泡排序算法冒泡排序算法是一种简单的排序算法,用于将一个无序数组按照升序或降序排列。
它的基本思想是从数组的第一个元素开始,两两比较相邻元素的大小并交换位置,按照此规则不断遍历数组直到排序完成。
4.选择排序算法选择排序算法是一种简单的排序算法,用于将一个无序数组按照升序或降序排列。
它的基本思想是从数组中选择最小(或最大)的元素并放置到第一个位置,然后在剩余的元素中选择最小(或最大)的元素并放置到第二个位置,如此循环直到排序完成。
5.插入排序算法插入排序算法是一种简单的排序算法,用于将一个无序数组按照升序或降序排列。
它的基本思想是将数组分为已排序部分和未排序部分,每次从未排序部分选取一个元素插入到已排序部分的适当位置,如此循环直到排序完成。
6.计数排序算法计数排序算法是一种简单的排序算法,适用于待排序的元素是有限个数的情况。
它的基本思想是统计数组中每个元素出现的次数,然后根据统计结果重新排列数组。
7.求和算法求和算法是一种简单的计算算法,用于计算一个数组中所有元素的和。
它的基本思想是遍历数组,累加每个元素的值得到最终结果。
8.求平均值算法求平均值算法是一种简单的计算算法,用于计算一个数组中所有元素的平均值。
C语言常用简单算法C语言是一种广泛应用的编程语言,支持各种算法的实现。
以下是一些常用的简单算法,涵盖了排序、查找、递归等方面。
1. 冒泡排序(Bubble Sort):通过不断比较相邻元素的大小,将较大的元素逐步“冒泡”到数组的末尾。
2. 选择排序(Selection Sort):每次从未排序的数组中选择最小(或最大)的元素,放到已排序数组的末尾。
3. 插入排序(Insertion Sort):将数组分为已排序和未排序两个部分,每次将未排序部分中的元素插入到已排序部分的正确位置。
4. 快速排序(Quick Sort):选择一个基准元素,将数组分成两部分,将小于基准的元素放在左边,大于基准的元素放在右边,然后递归地对两部分进行排序。
5. 归并排序(Merge Sort):将待排序数组递归地分成两部分,分别进行排序,然后再将两个有序的数组合并成一个有序的数组。
6. 二分查找(Binary Search):对于有序数组,通过比较中间元素和目标值的大小,缩小查找范围,直到找到目标值或查找范围为空。
7. 线性查找(Linear Search):对于无序数组,逐个比较数组中的元素和目标值,直到找到目标值或遍历完整个数组。
8. 求阶乘(Factorial):使用递归方式或循环方式计算给定数字的阶乘。
9. 斐波那契数列(Fibonacci Sequence):使用递归方式或循环方式生成斐波那契数列。
10. 汉诺塔(Tower of Hanoi):使用递归方式实现汉诺塔问题的解决,将一组盘子从一个柱子移动到另一个柱子。
11. 判断回文数(Palindrome):判断给定数字是否为回文数,即正序和倒序相同。
12.求最大公约数(GCD):使用辗转相除法或欧几里德算法求两个数的最大公约数。
13.求最小公倍数(LCM):通过最大公约数求得最小公倍数。
14. 求质数(Prime Number):判断给定数是否为质数,即只能被1和自身整除。
C语言常用的入门算法C语言是一门广泛应用于计算机科学和软件开发领域的编程语言。
作为一门通用的编程语言,C语言提供了丰富的算法和数据结构库,使得开发人员能够解决各种不同类型的问题。
下面是C语言入门算法的一些常见示例:1.排序算法:-冒泡排序:通过不断比较相邻的元素,并交换它们的位置来排序。
-插入排序:将未排序的元素逐一插入已排序的列表中。
-选择排序:通过重复找到最小的元素并将其放置在已排序序列的末尾来排序。
-快速排序:通过选择一个基准元素,将列表划分成较小和较大的两部分,然后对其进行递归排序。
-归并排序:将列表分成较小的子列表,然后逐个合并这些子列表。
2.查找算法:-顺序查找:逐个比较列表中的元素,直到找到匹配的元素为止。
-二分查找:在已排序的列表中通过递归或循环的方式,将待查找的元素与中间元素进行比较,以确定它可能在哪一半中。
-哈希表:通过散列函数将元素映射到一个较小的固定大小的数组(哈希表)中,并通过索引快速查找。
3.字符串算法:-字符串长度:使用循环逐个字符遍历,直到遇到字符串结束符'\0'为止,统计字符个数。
-字符串比较:逐个字符比较两个字符串的对应位置,直到遇到不相等的字符或字符串结束符。
-字符串拼接:将一个字符串的字符逐个复制到另一个字符串的末尾,直到遇到字符串结束符'\0'。
-子字符串匹配:在一个较长的字符串中查找一个较短的子字符串,常用的算法有朴素算法和KMP算法。
4.数值算法和运算:-求和、平均值、最大/最小值:循环遍历列表,累加求和,计算平均值,找出最大/最小值。
-阶乘和斐波那契数列:使用循环或递归计算给定数字的阶乘和斐波那契数列。
-幂运算和开方:通过循环或递归计算给定数字的幂和开方。
- 线性方程求解:求解形如ax + b = 0的一元线性方程。
5.图算法:-广度优先(BFS):通过遍历图的邻居节点来逐层扩展区域,通常用于查找最短路径。
-深度优先(DFS):通过遍历图的邻居节点来递归到达所有可能的节点,通常用于查找所有路径、拓扑排序等。
C 程序设计的常用算法算法( Algorithm ):计算机解题的基本思想方法和步骤。
算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。
通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、简单数值类算法此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
1、求阶乘:n!=1*2*384 …..*n; n!= n*(n-1)!=下列程序用于求n 的阶乘.在累乘之前,一定要将用于存放乘积的变量的值初始化为1.long func(int n){int i;long t=1;for(i=2;i<=n;i++) t*=i;return t;}printf("\n");}main(){ int n;scanf("%d", &n);printf("n!=%ld\n", fac(n));}2、整数拆分问题:把一个整数各个位上的数字存到数组中#define N 4 /* N 代表整数位数*/ viod split(int n, int a[ ] ) /* 1478: a[ 3]=8, a[2 ]=7, a[1 ]=4 …*/{int i;for(i=N-1;i!=0; i--){ a[i]=n%10;n=n/10;}}main(){int i,m=1478,b[N-1]; split(m, b) ; for(i=0;i<4; i++)printf( “%5d”, b[i]); }3、求整数的因子之和12=1*2*3*4 long factor(int n){int i;long sum=0;for(i=1;i<=n;i++)if(n%i= =0)sum+=i;return sum;}注意:因子包括1 和自身。
二、求两个整数的最大公约数、最小公倍数分析:求最大公约数的算法为辗转相除法。
(最小公倍数= 两个整数之积/最大公约数)求最大公约数的算法步骤:⑴对于已知两数m, n,使得m>n;(2) m 除以n 得余数r;r=m%n;(3) 若r= =0,则n为求得的最大公约数,算法结束;否则执行(4);(4) m—n, n—r,再重复执行(2)。
例如: 求m=14 ,n=6 的最大公约数. m n r14 %6= 26 %2= 0 输出2void main(){ int nm,r,n,m,t;printf("please input two numbers:\n");scanf("%d,%d",&m,&n);nm=n*m;if (m<n){ t=n; n=m; m=t; }r=m%n;while (r!=0){ m=n; n=r; r=m%n; }printf(" 最大公约数:%d\n",n);printf(" 最小公倍数:%d\n", nm/n);}将其写成一函数,返回最大公约数。
int gcd(int m,int n){ int t,r;if(m<n) { t=m;m=n;n=t; }r=m%n;while(r!=0){ m=n; n=r; r=m%n; }return n;}int gcd(int m,int n){ int t,r;if(m<n) { t=m;m=n;n=t; }do{ r=m%n;m=n; n=r; } while(n!=0)return m;int gcd(int m,int } 如果求最小公倍数,其函数形式稍作调整:n){ int a=m, b=n;int t,r;if(m<n) { t=m;m=n;n=t; } r=m%n;while(r!=0){ m=n; n=r; r=m%n; } return (a*b)/n; }三、判断素数只能被1 和本身整除的正整数称为素数。
基本思想:在判断数m 是否为素数时,首先把m 作为被除数,将2—sqrt(m)的所有数字依次作为除数,去除m,只要有一个数能将m 整除,则m 不是素数;否则,如果都除不尽,则m 就是素数。
(可用以下程序段实现)#include <math.h>void main(){ int m,i,k;printf("please input a number:\n");scanf("%d",&m);k=sqrt(m); /* 使用此函数一定要加头文件#include <math.h>*/for(i=2;i<k;i++)if(m%i==0) break;if(i>=k)printf(" 该数是素数");elseprintf(" 该数不是素数");}将其写成一函数,若为素数返回1,不是则返回0int prime( int m){int i,k;k=sqrt(m); /*使用此函数一定要加头文件#inelude <math.h>*/for(i=2;i<k;i++)if(m%i==O) return 0; return 1; }四、求最值例如求最小值算法思想:定义变量min 用于存放当前所有找到的最小数,a 为已知 数组。
算法步骤如下:1) 在min 中存放第1个数,比较从数组中的第二个元素 开始。
2) 数组a 中每个元素依次与 min 中的数组相比,小者放 入min中。
3) 比较完数组的最后一个元素,算法结束。
Min 中数为 所求。
程序如下:int min value(i nt a[],i nt n) {int i,min; min=a[0]; for(i=1;i <n ;i++)if(a[i]<mi n) mi n=a[i]; return min;}main(){ int a[10]={12,45,7,8,96,4,10,48,2,46},i,min; for(i=0;i<10;i++)求最大值:max=a[0]; for(i=0;i <n ;i++) if(a[i]>max) max=a[i];printf( “%3d”,a[i]);printf( “\n”); min=minvalue(a,10); printf( “the result is:%d”, min);}五、排序问题1 •选择法排序(升序)基本思想:1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置;2)除第1个数外,其余n-1个数中选最小的数,与第2 个数交换位置;3)依次类推,选择了n-1次后,这个数列已按升序排列。
程序代码如下:void mai n(){ int i,j,imi n,s,a[10];printf("\n in put 10 numbers:\n"); for(i=0;i<10;i++) sca nf("%d", &a[i]);for(i=0;i<9;i++) { imi n=i;for(j=i+1;j<10;j++)if(a[imi n]>a[j]) imi n=j;if(i!=imi n){s=a[i]; a[i]=a[imi n]; a[imin]=s; } prin tf("%d\n",a[i]);}}2 •冒泡法排序(升序) 16,17,19,14, 23, 34,8, 33,45,56,基本思想:(将相邻两个数比较,小的调到前头)1) 有n 个数(存放在数组a (n )中),第一趟将每相邻两个 数比较,小的调到前头,经n-1次两两相邻比较后,最大的数 已“沉底”,放在最后一个位置,小数上升“浮起”;2) 第二趟对余下的n-1个数(最大的数已“沉底”)按上 法比较,经n-2次两两相邻比较后得次大的数;{t=a[i];a[i]=a[i+1];a[i+1]=t;}3) 依次类推,n 个数共进行 行n-j 次两两比较。
程序段如下void mai n() { int a[10]; int i,j,t;prin tf("i nput 10 nu mbers\n"); for(i=O;i<1O;i++) sca nf("%d", &a[i]); prin tf("\n");for(j=0;jv=8;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1])n-1趟比较,在第j 趟中要进 自定义函数形式:void sort(int a[], int n) { int i,j,t;for(j=0;j<=8;j++) for(i=0;i<9-j;i++) if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}}printf("the sorted numbers:\n");for(i=0;i<10;i++),",a[i]);}3.合并法排序(将两个有序数组A、B 合并成另一个有序的数组C,升序)a[10]: 1,3,5,6b[10]: 2,4,7,9,10.23c[20]: 1, 2,3, 4, 5,6, 7,9,10.23基本思想:1) 先在A 、B 数组中各取第一个元素进行比较,将小的元素放入C 数组;2) 取小的元素所在数组的下一个元素与另一数组中上次比较后较大的元素比较,重复上述比较过程,直到某个数组被先排完;3) 将另一个数组剩余元素抄入C 数组,合并排序完成。
程序段如下:void main(){ int a[10],b[10],c[20],i,ia,ib,ic;printf("please input the first array:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)scanf("%d",&b[i]); printf("\n"); ia=0;ib=0;ic=0;while(ia<10&&ib<10) { if(a[ia]<b[ib]) { c[ic]=a[ia];ia++;} else { c[ic]=b[ib];ib++;} ic++;} while(ia<=9) { c[ic]=a[ia]; ia++;ic++;} while(ib<=9) { c[ic]=b[ib];ib++;ic++;} for(i=0;i<20;i++) printf("%d\n",c[i]);}六、查找问题1 •①顺序查找法(在一列数中查找某数 X )思考:将上面程序改写一查找函数 Find ,若找到则返回下 标值,找不到返回-1②基本思想:一列数放在数组a[1]---a[n]中,待查找的关键值为key ,把key 与a 数组中的元素从头到尾一一进行比较 查找,若相同,查找成功,若找不到,则查找失败。