C语言编程常用算法
10个经典的C语言基础算法及代码

10个经典的C语言基础算法及代码1.冒泡排序算法冒泡排序是一种简单但效率较低的排序算法,在每一轮遍历中比较相邻的两个元素,如果顺序不正确则交换它们,直到整个数组有序为止。
```cvoid bubbleSort(int arr[], int n)for (int i = 0; i < n-1; i++)for (int j = 0; j < n-1-i; j++)if (arr[j] > arr[j+1])int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}```2.选择排序算法选择排序是一种简单直观的排序算法,它每次从待排序的数组中选择最小(或最大)的元素,并放到已排序的数组末尾。
```cvoid selectionSort(int arr[], int n)for (int i = 0; i < n-1; i++)int min_index = i;for (int j = i+1; j < n; j++)if (arr[j] < arr[min_index])min_index = j;}}int temp = arr[i];arr[i] = arr[min_index];arr[min_index] = temp;}```3.插入排序算法插入排序的基本思想是将数组分为已排序和未排序两部分,每次将未排序的元素插入到已排序的合适位置。
```cvoid insertionSort(int arr[], int n)for (int i = 1; i < n; i++)int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key)arr[j+1] = arr[j];j--;}arr[j+1] = key;}```4.快速排序算法快速排序使用分治法的思想,每次选择一个基准元素,将小于基准的元素放到左边,大于基准的元素放到右边,然后递归地对左右两个子数组进行排序。
c语言中的算法

c语言中的算法C语言是一种广泛使用的编程语言,它具有强大的算法实现能力。
算法是解决问题的一种有序的方法和步骤,它可以应用于不同的领域,如排序、搜索、图形处理等。
本文将介绍C语言中常见的一些算法。
我们来看排序算法。
排序算法是将一组数据按照特定的顺序进行排列的过程。
在C语言中,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序等。
冒泡排序是一种简单的排序算法,它通过不断地比较相邻两个元素的大小,将较大的元素逐步交换到数组的末尾。
选择排序是一种简单但低效的排序算法,它通过不断选择最小的元素并将其放置在正确的位置上来排序。
插入排序是一种将待排序序列分为已排序和未排序两部分的排序算法,它通过依次将未排序序列中的元素插入到已排序序列的正确位置上来排序。
快速排序是一种非常高效的排序算法,它通过选择一个基准元素,然后将待排序序列不断地分割成较小和较大两部分,并对这两部分进行递归排序,最后将结果合并起来。
我们来看搜索算法。
搜索算法是在一个数据集中查找某个特定元素的过程。
在C语言中,常见的搜索算法有线性搜索、二分搜索、哈希表等。
线性搜索是一种简单但低效的搜索算法,它通过遍历整个数据集来寻找目标元素。
二分搜索是一种高效的搜索算法,它要求数据集是有序的,并通过不断将数据集分成两半来查找目标元素。
哈希表是一种通过将关键字映射到一个唯一的索引位置来快速查找元素的数据结构,它在C语言中可以通过使用散列函数和数组来实现。
然后,我们来看图形处理算法。
图形处理算法是对图像进行处理和分析的算法。
C语言中常见的图形处理算法有图像滤波、边缘检测、图像压缩等。
图像滤波是一种通过对图像的像素进行重新计算来改变图像外观的算法,它可以用于去除噪声、增强图像细节等。
边缘检测是一种用于检测图像中边缘的算法,它通过寻找图像中亮度变化较大的区域来定位边缘。
图像压缩是一种通过减少图像数据的存储空间来减小图像文件大小的算法,它可以通过舍弃冗余信息和使用压缩编码技术来实现。
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.基本概念:如果函数连续,且待求零点孤⽴,那么在零点周围存在⼀个区域,当初值在这个邻域内时,⽜顿法收敛。
C语言常用算法程序汇总

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和自身。
C语言基本算法

C语言基本算法C语言是一种广泛使用的编程语言,用于开发各种应用程序和系统。
算法是编程的核心部分,是解决问题的方法和步骤的描述。
在C语言中,有许多基本算法可以用来解决简单级别的问题。
下面我将介绍几种常见的C语言基本算法。
1.线性查找算法线性查找算法是一种简单的查找算法,它从数组的第一个元素开始顺序地比较,直到找到目标元素或遍历完整个数组。
这个算法的时间复杂度是O(n)。
```cint linearSearch(int arr[], int n, int target)for (int i = 0; i < n; i++)if (arr[i] == target)return i;}}return -1;```这个算法接受一个整数数组arr、数组的大小n和目标元素target 作为输入,并返回目标元素在数组中的索引,如果未找到则返回-12.冒泡排序算法冒泡排序是一种简单的排序算法,它通过多次循环比较和交换相邻元素来排序。
每次循环都将最大的元素冒泡到数组的末尾。
这个算法的时间复杂度是O(n^2)。
```cvoid bubbleSort(int arr[], int n)for (int i = 0; i < n-1; i++)for (int j = 0; j < n-i-1; j++)if (arr[j] > arr[j+1])int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}```这个算法接受一个整数数组arr和数组的大小n作为输入,并将数组按升序排序。
3.二分查找算法二分查找算法是一种高效的查找算法,它使用分治策略将有序数组分为两部分,并选择中间元素进行比较。
如果中间元素等于目标元素,则返回中间元素的索引;否则,如果中间元素大于目标元素,则在左侧部分继续查找;如果中间元素小于目标元素,则在右侧部分继续查找。
这个算法的时间复杂度是O(logn)。
C语言常用算法

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语言中,算法是解决问题的关键。
算法是一系列指令或步骤,用于执行特定任务或解决特定问题。
本文将总结C语言中常用的算法。
一、排序算法排序算法是将一组数据按照特定规则进行排列的算法。
常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并排序等。
这些算法的时间复杂度和空间复杂度不同,对于不同规模的数据集合选择不同的算法可以提高排序效率。
冒泡排序是一种简单的排序算法,它的核心思想是从左到右逐个比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置。
通过多次遍历,将最大的元素逐渐移动到最右边,直到所有元素有序。
选择排序是一种简单直观的排序算法,它的核心思想是每次从未排序的元素中选择出最小(或最大)的元素,将其放到已排序的序列末尾。
通过不断选择剩余元素中的最小(或最大)元素,最终得到一个有序序列。
插入排序是一种稳定的排序算法,它的核心思想是将一个元素插入到已排好序的部分,通过不断扩大已排序部分,最终得到一个有序序列。
快速排序是一种快速高效的排序算法,它的核心思想是通过分治的思想将待排序的序列划分为较小的子序列,再将子序列进行排序,最终将整个序列排序。
归并排序是一种稳定的排序算法,它的核心思想是将待排序序列递归地划分成两个子序列,分别对子序列进行排序,然后合并两个有序子序列,最终得到一个有序序列。
二、搜索算法搜索算法是在一个数据集合中查找特定元素或判断特定元素是否存在的算法。
常见的搜索算法有线性搜索、二分搜索、哈希表等。
线性搜索是一种简单直观的搜索算法,它的核心思想是从数据集合的第一个元素开始逐个对比,直到找到目标元素或遍历完整个数据集合。
二分搜索是一种高效的搜索算法,它的核心思想是将有序的数据集合从中间划分为两个部分,然后对比目标元素与中间元素的大小关系,根据大小关系决定搜索的方向,重复这个过程直到找到目标元素。
C语言常用算法总结
C语言常用算法模块的总结一、最大值,最小值问题教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2二、连乘连加问题 page113、114、115 page129/6.3 page129/6.4、6.5三、闰年算法 page17、 page107四、连续小数相加减 page18、 page124五、素数、整除问题 page18、 page124、 page126、 page127六、大小写字母转换、密码问题 page51、 page87、 page89/4.9、 page104、 page67、 page128七、格式化字符提醒起于page 76八、三角形面积问题 page86九、一元二次方程 page87、 page89/4.8、 page108十、分段一元函数 page100、 page110、 page111/5.5、5.6十一、位运算 page112/5.7、 page129/6.2、6.3十二、公约数公倍数 page129/6.1十三、迭代法、二分法 page129-130/6.11-13C语言常用算法模块的总结一、最大值,最小值问题教材page13/1.6、page36/2.4(2)、(3)、page98例5.1、5.2主要思想:替换+中转关联习语: if句int a,b,c,max; 多余的一个max是承载中转的容器scanf(“%d,%d,%d”,&a,&b,&c);max=a; 定初值if(max<b)Max=b; 分别取a、 b、c相互比较,由于只需输if(max<c) 出最大或者最小值,所以只需将最大值存Max=c; 储在max中即可printf(“……”);如果需要依次输出所给的数值,则须在比较大小之后进行替换赋值int a,b,t;scanf(“%d,%d”,&a,&b)if(a>b){ 此步的依次赋值体现了赋值运算自右向左的结合次序t=a; 先将a的值赋给t,此时a的值空出a=b; 将b的值赋给a,b值空出b=t; 将t中存储的a的值赋给b,此时t仍回复空值} 若混淆其中赋值规律则产生混乱printf(“……”);二、连乘连加问题page113、114、115 page129/6.3 page129/6.4、6.5主要思想:容器+循环关联习语:while(do……while)、for、(goto)int i,sum=0; 循环第一步,定初值,sum可视作是承载运算结果的容器,初为空i=1;while(i<=100) 构设循环条件,注意必须是有限循环,否则程序无终止{sum=sum+I; 循环第二步,累计结果i++; 循环第三步,循环量自增。
C语言常用的入门算法
C语言常用的入门算法C语言是一种广泛应用的编程语言,主要用于开发系统软件和应用程序。
对于初学者来说,了解一些常用的入门算法可以帮助他们掌握基本的编程技巧和思维方式。
以下是C语言常用的入门算法。
1.顺序结构:按照顺序执行代码。
这是C语言中最基础的算法结构。
例如,计算两个数的和:先输入两个数,然后将它们相加。
2. 分支结构:根据条件选择执行不同的代码块。
这是通过if-else语句实现的。
例如,判断一个数是奇数还是偶数:如果数除以2的余数为0,则为偶数,否则为奇数。
3. 循环结构:重复执行一段代码,直到满足一些条件。
这是通过for、while或do-while语句实现的。
例如,打印1到10的所有整数:使用for循环从1到10循环遍历,并打印每个数。
4.数组:一组相同类型的数据的集合。
可以使用循环结构对数组进行遍历和操作。
例如,计算一个数组的总和:使用循环遍历数组的每个元素,并将它们相加。
5.字符串操作:处理文本的一系列算法。
C语言中字符串是以字符数组的形式存储和操作的。
例如,计算字符串的长度:使用循环遍历字符串,直到找到字符串的结束符'\0'。
6.排序算法:将一组数据按照一定的顺序排列的算法。
常用的排序算法有冒泡排序、插入排序和快速排序等。
例如,使用冒泡排序对一组数进行排序:比较相邻的两个数,如果它们的顺序不正确,则交换位置。
7.查找算法:在一组数据中查找一些特定值的算法。
常用的查找算法有线性查找和二分查找等。
例如,使用线性查找在数组中查找一个数:遍历数组,逐个比较每个元素,直到找到目标数或遍历结束。
8.递归:一个函数调用自身的过程,可以用来解决一些重复性的问题。
例如,计算阶乘:使用递归调用函数自身,直到达到基本情况并返回结果。
10.文件操作:C语言中可以使用文件操作来读写文件。
例如,读取文件中的内容并打印:打开文件,逐行读取文件内容,然后打印。
这些算法只是C语言中的一小部分,但对于初学者来说足够入门,并可以帮助他们培养基本的编程思维和解决问题的能力。
C语言经典算法100例
C语言经典算法100例(1)(2007-08-15 15:09:22)C 语言编程经典 100 例【程序1】题目:有1、2、3、4个数字,能组成多少个互不一样且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:main(){int i,j,k;printf(“\n“);for(i=1;i〈5;i++) /*以下为三重循环*/for(j=1;j〈5;j++)for (k=1;k〈5;k++){if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不一样*/printf(“%d,%d,%d\n“,i,j,k);}}【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的局部按10%提成,高于10万元的局部,可可提成7.5%;20万到40万之间时,高于20万元的局部,可提成5%;40万到60万之间时高于40万元的局部,可提成3%;60万到100万之间时,高于60万元的局部,可提成1.5%,高于100万元时,超过100万元的局部按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
2.程序源代码:main(){long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld“,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i〈=100000)bonus=i*0.1;else if(i〈=200000)bonus=bonus1+(i-100000)*0.075;else if(i〈=400000)bonus=bonus2+(i-200000)*0.05;else if(i〈=600000)bonus=bonus4+(i-400000)*0.03;else if(i〈=1000000)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(“bonus=%d“,bonus);}【程序3】题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言编程常用算法
2009-10-21 17:45:33| 分类: C语言|字号 订阅
C语言编程的常用算法 算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[10]来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在x[10]。
void main() { int a[101],x[11],i,p; for(i=0;i<=11;i++) x=0; for(i=1;i<=100;i++) { a=rand() % 100; printf("%4d",a); if(i%10==0)printf("\n"); } for(i=1;i<=100;i++) { p=a%10; if(p==0) p=10; x[p]=x[p]+1; } for(i=1;i<=10;i++) { p=i; if(i==10) p=0; printf("%d,%d\n",p,x); } printf("\n"); } 二、求两个整数的最大公约数、最小公倍数 分析:求最大公约数的算法思想:(最小公倍数=两个整数之积/最大公约数)
(1) 对于已知两数m,n,使得m>n; (2) m除以n得余数r; (3) 若r=0,则n为求得的最大公约数,算法结束;否则执行(4); (4) m←n,n←r,再重复执行(2)。 例如: 求 m=14 ,n=6 的最大公约数. m n r
14 6 2 6 2 0 void main() { int nm,r,n,m,t; printf("please input two numbers:\n"); scanf("%d,%d",&m,&n); nm=n*m; if (m{ 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); } 三、判断素数 只能被1或本身整除的数称为素数 基本思想:把m作为被除数,将2—INT( )作为除数,如果都除不尽,m就是素数,否则就不是。(可用以下程序段实现)
void main() { int m,i,k; printf("please input a number:\n"); scanf("%d",&m); k=sqrt(m); for(i=2;iif(m%i==0) break; if(i>=k) printf("该数是素数"); else printf("该数不是素数"); } 将其写成一函数,若为素数返回1,不是则返回0
int prime( m%) {int i,k; k=sqrt(m); for(i=2;iif(m%i==0) return 0; return 1; } 四、验证哥德巴赫猜想 (任意一个大于等于6的偶数都可以分解为两个素数之和) 基本思想:n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验n1、n2是否素数,… 直到n1=n/2为止。
利用上面的prime函数,验证哥德巴赫猜想的程序代码如下: #include "math.h" int prime(int m) { int i,k; k=sqrt(m); for(i=2;iif(m%i==0) break; if(i>=k) return 1; else return 0; } main() { int x,i; printf("please input a even number(>=6):\n"); scanf("%d",&x); if (x<6||x%2!=0) printf("data error!\n"); else for(i=2;i<=x/2;i++) if (prime(i)&&prime(x-i)) { printf("%d+%d\n",i,x-i); printf("验证成功!"); break; } } 五、排序问题 1.选择法排序(升序) 基本思想: 1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置;
2)除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置; 3)依次类推,选择了n-1次后,这个数列已按升序排列。 程序代码如下: void main() { int i,j,imin,s,a[10]; printf("\n input 10 numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a); for(i=0;i<9;i++) { imin=i; for(j=i+1;j<10;j++) if(a[imin]>a[j]) imin=j; if(i!=imin) {s=a; a=a[imin]; a[imin]=s; } printf("%d\n",a); } } 2.冒泡法排序(升序) 基本思想:(将相邻两个数比较,小的调到前头)
1)有n个数(存放在数组a(n)中),第一趟将每相邻两个数比较,小的调到前头,经n-1次两两相邻比较后,最大的数已“沉底”,放在最后一个位置,小数上升“浮起”;
2)第二趟对余下的n-1个数(最大的数已“沉底”)按上法比较,经n-2次两两相邻比较后得次大的数;
3)依次类推,n个数共进行n-1趟比较,在第j趟中要进行n-j次两两比较。 程序段如下 void main() { int a[10]; int i,j,t; printf("input 10 numbers\n"); for(i=0;i<10;i++) scanf("%d",&a); printf("\n"); for(j=0;j<=8;j++) for(i=0;i<9-j;i++) if(a>a[i+1]) {t=a;a=a[i+1];a[i+1]=t;} printf("the sorted numbers:\n"); for(i=0;i<10;i++) printf("%d\n",a); } 3.合并法排序(将两个有序数组A、B合并成另一个有序的数组C,升序) 基本思想: 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); for(i=0;i<10;i++) scanf("%d",&b); printf("\n"); ia=0;ib=0;ic=0; while(ia<10&&ib<10) { if(a[ia]{ 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]; b++;ic++; } for(i=0;i<20;i++) printf("%d\n",c); } 六、查找问题 1.①顺序查找法(在一列数中查找某数x) 基本思想:一列数放在数组a[1]---a[n]中,待查找的数放在x 中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a[p]
比较,如果x不等于a[p],则使p=p+1,不断重复这个过程;一旦x等于a[p]则退出循环;另外,如果p大于数组长度,循环也应该停止。(这个过程可由下语句实现)
void main() { int a[10],p,x,i; printf("please input the array:\n"); for(i=0;i<10;i++) scanf("%d",&a); printf("please input the number you want find:\n"); scanf("%d",&x); printf("\n"); p=0; while(x!=a[p]&&p<10) p++; if(p>=10) printf("the number is not found!\n"); else printf("the number is found the no%d!\n",p);