C语言实现——二分法查找目标元素位置

二分法,很容易想到,每次一分为二,逐步缩小查找范围,二分法在数学求根中有时候也会用到,使用二分法的原理很好理解,但要注意使用前一定要保证元素有序!!

//必须有序排列
#include 
int binarysearch(int a[], int value, int n)
{
    int low = 1, high = n;
    int mid;
    while (low <= high)
    {
        mid = (low + high) / 2;
        if (value > a[mid])
            low = mid + 1;
        else if (value < a[mid])
            high = mid - 1;
        else
            return mid;
    }
    return 0;
}
//选择排序
void sort(int a[], int n)
{
    for (int i = 1; i < n; i++)
    {
        int min = i; //用于记录下最小元素的下标,即位置
        for (int j = i + 1; j <= n; j++)
        {
            if (a[j] < a[min])
            {
                min = j;
            }
        }
        if (i != min)
        {
            int temp = a[min];
            a[min] = a[i];
            a[i] = temp;
        }
    }
}

int main()
{
    int n, value;
    printf("请输入元素个数\n");
    scanf("%d", &n);
    int a[11];
    printf("请依次输入元素的值\n");
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("请输入要查找的值\n");
    scanf("%d", &value);
    sort(a, n);
    int result = binarysearch(a, value, n);
    if (result)
        printf("找到了!是排序后的第%d个位置", result);//是排序后的所在位置
    else
        printf("太遗憾了,么有找到啊!");
    return 0;
}

你可能感兴趣的:(C/C++排序算法)