常用排序&查找算法(C语言实现)
warning:
这篇文章距离上次修改已过1875天,其中的内容可能已经有所变动。
冒泡排序

//冒泡排序
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[10];//={45,42,132,78,65,64,71,48,13,137};
int i,t,j;
for (i=0;i<10;i++)
{
printf ("请输入第%d数据!",i+1);
scanf ("%d",&a[i]);
}
for (i=1;i<10;i++)
{
for (j=0;j<10-i;j++)
{
if (a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for (i=0;i<10;i++)
{
printf ("【%d】",a[i]);
}
system("pause"); //dos暂停命令,可省去!
return 0;
}
简单选择排序

//简单选择排序
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[10]={10,45,3,45,46,44,78,66,75,985};
int i,j,min,t;
for(i=0;i<10;i++)
{
min=i;
for(j=i+1;j<10;j++)
if(a[min]>a[j])
min=j;
t=a[i];
a[i]=a[min];
a[min]=t;
}
for(i=0;i<10;i++)
{
printf("%d,",a[i]);
}
system("pause");
return 0;
}
直接插入排序

//直接插入排序
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[]={45,42,132,78,65,64,71,48,13,137};
int i,t,j;
for (i=1;i<10;i++)//控制执行次数(n-1)
{
t=a[i];//保存无序区第一条记录
j=i-1;
while (a[j]>t&&j>=0)
{
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
for (i=0;i<10;i++)
{
printf ("【%d】",a[i]);
}
system("pause");
return 0;
}
顺序查找

//顺序查找
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[10]={45,42,132,78,65,64,71,48,13,137};
int i,x,y;
printf("输入你要查找的数:");
scanf("%d",&x);
y=0; //标记是否已找到,y=1表是找到了,y=0表示没找到
for(i=0;i<10;i++) //循环,把x和数组中的元素一个个比较
{
if(x==a[i]) //如果x=a[i]说明已经找到
{
y=1; //把y变成1,说明已经找到了
printf("你要查找的数%d在第个%d位置\n",x,i+1); //输出找到的相关信息
break; //跳出循环
}
}
if(y==0)printf("无法找到你要查找的数\n"); //y=0表示找不到
system("pause");
return 0;
}
二分查找

//二分查找
#include <stdio.h>
#include <stdlib.h>
void main()
{
int a[10]={25,29,36,45,78,88,97,136,456,888};
int low,high,mid,x;
printf ("请输入要查找的数据:");
scanf("%d",&x);
low=0;
high=9;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]==x) break;
else if(a[mid]>x)high=mid-1;
else low=mid+1;
}
if(low>high)
printf("查找失败\n");
else
printf("a[%d]是查找记录\n",mid);
system("pause");//dos暂停命令,可省略!
return 0;
}