1.累加法,累乘法
将一串数字累加或累乘
应用,求某一串数字的和或积,
下面代码为求1到n的阶乘的和(递归方式)
#include <stdio.h>
int jie(int n)
{
if(n==1)
return 1;
return n*jie(n-1);
}
int sum(int i)
{
if(i==1)
return 1;
return sum(i-1)+jie(i);
}
int main()
{
int a,b;
scanf("%d,%d",&a,&b);
scanf("");
printf("%d\n",jie(a));
printf("%d\n",sum(b));
}
2.监哨值法
在多个元素中,从左往右遍历中通过哨兵去指向当前的最值。
应用:求当前元素中的最值
下面为求最大值
#include<stdio.h>
void main()
{
int i=0;
int a=buf[0];
int buf[10]={1,2,7,9,5,6};
for(i=1;i<6;i++)
{
if(a<buf[i])
a=buf[i];
}
printf("%d",a);
}
3.冒泡排序
将一组元素从前往后遍历根据大小关系进行交换
应用将一组元素按一定顺序排列(升序,降序)
下面为降序排列
#include<stdio.h>
void main()
{
char buf[11]="abcdjdksla";
int i,j,temp;
for(i=0;i<10;i++)
{
for(j=0;j<10-i-1;j++)
{
if(buf[j]<buf[j+1])
{
temp=buf[j];
buf[j]=buf[j+1];
buf[j+1]=temp;
}
}
}
printf("%s",buf);
}
4.插入排序
将数组分成排序和未排序两个部分
注:第一个元素相当于已排序好的
#include<stdio.h>
void main()
{
int buf[6]={3,5,1,7,4,9};
int i,j,temp;
for(i=0;i<6-1;i++)
{
j=i;
temp=buf[j];
if(buf[j]<buf[j-1])
{
while(j>0&&temp<buf[j-1])
{
buf[j]=buf[j-1];
j--;
}
buf[j]=temp;
}
}
for(i=0;i<6;i++)
printf("%d",buf[i]);
}
5.选择排序
再为排序的元素中找出最大/小值将这个值放到已排序的元素的最后面
注:当只剩一个元素未排序时,其实这个时候排序已完成。
#include<stdio.h>
void getmax(char buf[100])
{
int listen=0;
int i,j;
char temp;
for(i=0;buf[i]!='\0';i++)
{
listen=i;
for(j=i+1;buf[j]!='\0';j++)
{
if(buf[listen]<buf[j])
{
listen=j;
}
}
if(listen!=i)
{
temp=buf[i];
buf[i]=buf[listen];
buf[listen]=temp;
}
}
printf("%s",buf);
}
6.二分查找法
查找关键字符:二分(折半)查找法 (缩小区域)
前题:查找序列是有序(降/升序)
假定:升序
1、每次取序列中间元素进行比较
2、如果key>mid,说明查找值在中间元素的右侧,
如果key<mid,说明查找值在中间元素的左侧,
key==mid,说明查找成功
3、如果查找不成功,则再重复1,2步骤,直到查找成功或失败
#include<stdio.h>
struct student
{
char name[10];
int score;
char miaoshu[20];
};
void cha(struct student buf[100],int key,int left,int right)
{
int mid;
mid=(left+right)/2;
if(left>right)
{
printf("查找失败");
return ;
}
if(key<buf[mid].score)
return cha(buf,key,left,mid-1);
else if(key>buf[mid].score)
return cha(buf,key,mid+1,right);
else if(key==buf[mid].score)
{
printf("查找成功\n");
printf("%s%d%s\n",buf[mid].name,buf[mid].score,buf[mid].miaoshu);
return ;
}
}
void main()
{
struct student buf[100]={{"zs",45,"张三"},{"ls",67,"李四"},\
{"ww",68,"王五"},{"wmz",78,"王麻子"},{"bsj",100,"白少杰"}};
cha(buf,67,0,4);
}