二分查找

一组数从大到小进行排序,根据某一数值,在数组中查找出最先出现的与其相等的数据元素,如果存在,就返回它的下标(排序后下标),否则返回-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);
}

posted @ 2017-06-06 10:11  Ridgway  阅读(148)  评论(1)    收藏  举报