实验内容:
1、 分别编制函数实现二分检索、冒泡排序算法,从键盘上输入数据分别进行检索和排序。
2、 分析算法在你所输入的数据的情况下分别作了多少次基本操作。
实验要求:
1、 首先对如下数据[29, 58, 15, 67, 86, 43, 25, 25,30]进行冒泡排序,并分析其比较次数和稳定性,然后从键盘上任意输入一个数用二分搜索算法搜索该数是否在上述数组中,同时输出比较次数。
#include<stdio.h>
int Find(int a[],int x,int length);
void swap(int *a,int *b);
int main()
{
int array[9]={29, 58, 15, 67, 86, 43, 25, 25, 30};
int i,j;
int num=0;
int x,length=9;
int flag;
for(i=0;i<9;i++)
{
for(j=8;j>=i;j--)
{
num++;
if(array[j]<array[j-1])
{
swap(&array[j-1],&array[j]);
}
}
}
for(i=0;i<9;i++)
{
printf("%d ",array[i]);
}
printf("\n");
printf("请输入要查找的元素: ");
scanf("%d",&x);
flag=Find(array,x,length);
if(flag>=0)
if(flag==1||flag==2)
{
printf("要查找的数据是数组中第2或3个元素\n");
}
else
{
printf("要查找的数据是数组中第%d个元素\n",flag+1);
}
else
printf("没有找到要找的数\n");
printf("比较次数为%d\n",num);
return 0;
}
int Find(int a[],int x,int length)
{
int low,high;
int mid;
low=0; high=length-1;
while(low<=high)
{
mid=(low+high)/2;
if(x<a[mid]) high=mid-1;
else if(x>a[mid]) low=mid+1;
else return mid;
}
return -1; //和输出要查找数的下标相关,而数组的首个字下标是0.会出问题
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}