c语言 (冒泡法,选择法,折半查找法,插入法)
冒泡法
(1)从第一个数开始,相邻两个数两两比较,将大的(或小的)交换到后面,然后继续比较第2、3个数……当比较完最后两个数的时候,最大数(或最小数)便排在最后了。此过程称为“一趟”。
(2)将最大数排除在外,其余数重复步骤1。
(3)重复步骤2,直到所有数都排好为止。
#include<stdio.h>
int main()
{
int i,j,a[6],t;
printf("输入六个整数:\n");
for(i=0;i<=5;i++)
{
scanf("%d",&a[i]);
}
printf("从小到大排序为:\n");
for(i=0;i<=5;i++)
for(j=i+1;j<=5;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
for(i=0;i<=5;i++)
{
printf("%d ",a[i]);
}
return 0;
}
选择法(打擂台)
1、找出一个最小数,交换到最前面。
2、在剩下的数里面,再找一个最小的,交换到剩下数的最前面
3、重复步骤2 ,直到所有数都已排好。
#include<stdio.h>
int main()
{
int i,j,a[6],t,k;
printf("输入六个整数:\n");
for(i=0;i<=5;i++)
{
scanf("%d",&a[i]);
}
printf("从小到大排序为:\n");
for(i=0;i<=5;i++)
{
k=i;
for(j=i+1;j<=5;j++)
{
if(a[k]>a[j])
k=j;
}
if(k!=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
for(i=0;i<6;i++)
printf("%d ",a[i]);
return 0;
}
折半查找法(二分查找法)
对于已经排列好的一组数进行查找数据。
#include<stdio.h>
int main()
{
int i,key,low,height,mid,a[6]={1,2,3,4,5,6};
printf("输入一个整数:");
scanf("%d",&key);
low=0;
height=5;
while(low<=height)
{
mid=(low+height)/2;
if(a[mid]==key)
break;
else if(a[mid]<key)
low=mid+1;
else if(a[mid]>key)
height=mid-1;
}
if(low<height)
printf("yes");
else
printf("no");
return 0;
}
插入法
在有序数列中插入一个数据。
1找位置
2腾位置
3放下去
用折半法下使用插入法。
#include<stdio.h>
int main()
{
int i,j,key,low,height,mid,a[7]={1,2,3,5,6,9};
printf("输入一个整数:");
scanf("%d",&key);
low=0;
height=5;
while(low<=height)
{
mid=(low+height)/2;
if(a[mid]==key)
break;
else if(a[mid]<key)
low=mid+1;
else if(a[mid]>key)
height=mid-1;
}
if(low<=height)
printf("yes");
else{ //开始插入法
for(j=5;j>=0&&key<a[j];j--)
{
a[j+1]=a[j];
a[j]=key;
}
for(i=0;i<=6;i++)
{
printf("%d",a[i]);
}
}
return 0;
}