二分查找
一组数从大到小进行排序,根据某一数值,在数组中查找出最先出现的与其相等的数据元素,如果存在,就返回它的下标(排序后下标),否则返回-1。
提示:采用冒泡法排序,然后可以采用折半查找法查找,如果查找某个数,先把这个数和这个序列的居中的数比较,确定区域后再和这个确定的区域内居中的数比较。(数组大小,数组数据,以及查找的数据均由键盘输入)
#include <stdio.h>
int main()
{
int a[10];//输入固定个数的数据,也就是10个数字。
int i;
int target;
printf("请依次输入数组中的元素:");
for(i=0; i<10; i++)
scanf("%d", &a[i]);
bubble(a, 10);
printf("请输入你要查找的元素:");
scanf("%d", &target);
printf("The target's index is %d\n", binary_search(a, target, 0, 9));
return 0;
}
int bubble(int a[], int n)//从大到小排序。
{
int i, j;
int temp;
for(j=0; j<=n-1; j++)
{
for(i=0; i<n-j; i++)
if(a[i]<a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
return 0;
}
int binary_search(int a[], int target, int min_index, int max_index)
{
int i;
if(min_index>max_index)
return -1;
i = (min_index+max_index)/2;
if(a[i]==target)
return i;
if(a[i]>target)
return binary_search(a, target, min_index, i-1);
return binary_search(a, target, i+1, max_index);
}

浙公网安备 33010602011771号