折半查找
#include <stdio.h>
#include <string.h>
void main()
{
int array[] = {
110,100,90,80,70,60,50,40,30,20,10};
int num,i,j;
while(array[i]>0 &&array[i]<200)
{
i++;
}
num = i;
printf("\n-----数组元素个数为%d-----\n",i);
printf("\n-----排序前-----\n");
for(i=0;i<num;i++)
{
printf("%d\t",array[i]);
}
int tem;
printf("\n-----排序后-----\n");
for(i=0;i<num;i++)
{
for(j=0;j<num-1;j++)
{
if(array[j]>=array[j+1])
{
tem = array[j];
array[j] = array[j+1];
array[j+1] = tem;
}
}
}
for(i=0;i<num;i++)
{
printf("%d\t",array[i]);
}
printf("\n-----查找20-----\n");
int left,right,mid;
left = 0;
right = num;
mid = (left+right)/2;
while(array[mid]!=20)
{
if(array[mid]>20)
{
right = mid;
mid = (left+right)/2;
}
else
{
left = mid;
mid = (left+right)/2;
}
}
printf("\n%d位于数组第%d位置\n",array[mid],mid);
}
运行结果
root@ubuntu:/home/yqj/desktop/二分法# ./a.out
-----数组元素个数为11-----
-----排序前-----
110 100 90 80 70 60 50 40 30 20 10
-----排序后-----
10 20 30 40 50 60 70 80 90 100 110
-----查找20-----
20位于数组第1位置