1.二分查找算法,折半查找算法
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE_11 11
int binary_search(int key,int a[],int n)
{
int low,high,mid,count=0,count1=0;
low=0;
high=n-1;
while(low<high)
{
count++;
mid=(low+high)/2;
if(key<a[mid])
high=mid-1;
else if(key>a[mid])
low=mid+1;
else if(key==a[mid])
{
printf("查找成功!\n 查找 %d 次!a[%d]=%d",count,mid,key);
count1++;
break;
}
}
if(count1==0)
printf("查找失敗!\n");
printf("count1 : %d\n", count1);
return 0;
}
int maopao_func(int *data, int size)
{
int i , j , tmp;
for(i = 0 ; i < size-1 ; i++)
{
for(j = 0 ; j < size-1 - i; j++)
{
if(data[j] > data[j+1])
{
tmp = data[j];
data[j] = data[j+1];
data[j+1] = tmp;
}
}
}
return 1;
}
void printf_data(int *data, int size)
{
int i = 0;
for(i = 0 ; i < size; i++)
{
printf(" %d",data[i]);
}
printf("\n");
}
int get_data_func(int *data, int size)
{
int i;
srand(time(0));
for(i = 0 ; i < size; i++)
{
data[i] = rand() % 10;
}
return 1;
}
int main()
{
int i,key,a[SIZE_11],n;
printf("请输入数组元素:\n");
get_data_func(a, SIZE_11);
maopao_func(a, SIZE_11);
printf_data(a, SIZE_11);
printf("请输入你想查找的元素:\n");
scanf("%d",&key);
binary_search(key,a,SIZE_11);
printf("\n");
return 0;
}
2.参考
C语言中文网 C语言编程实例