C 程序执行二分查找以查找数字


2022年3月16日, Learn eTutorial
1547

什么是二分查找算法?

在此 C 程序中,我们正在实现二分查找算法以搜索关键数字。二分查找算法也称为“半区间算法”或“对数算法”。为了实现二分查找算法,我们需要按升序或降序对数组进行排序。

该算法将数组的中心元素与关键词进行比较。如果找到该元素,则会返回其位置并显示“搜索元素已找到”的消息。否则,如果中间数字小于关键词,则算法在左子数组上重复相同的步骤;如果元素大于数组的中心元素,则在右子数组上搜索。

注意:二分查找的最坏情况复杂度是 O(log n)

什么是冒泡排序技术?如何在 C 中实现二分查找?

导入头文件并初始化变量后,我们接受用户输入到数组中,并使用冒泡排序技术对数组进行排序。(请参考上一程序中的“冒泡排序”)。以升序排序元素后,我们显示已排序的数组并使用“do while”循环开始二分查找。在循环内部,取数组的中心元素并将其与键进行比较,直到找到该元素。

算法

步骤 1:将头文件包含到 C 程序中以使用内置函数。

步骤 2:初始化变量并使用 C 编程语法声明它们。

步骤 3:使用 printfscanf 内置函数从用户那里获取项数。

步骤 4:使用“for 循环”和 scanf 将元素接受到数组中。

步骤 5:使用“for 循环”和 printf 显示数组的元素。

步骤 6:打开嵌套的“for 循环”以实现冒泡排序算法。

步骤 7:使用 if 条件检查,比较元素是否大于被比较元素

步骤 8:如果是,则使用临时变量交换元素。

步骤 9:使用“for 循环”和 printf 打印已排序的数组。

步骤 10:使用 printfscanf 从用户那里接受要搜索的元素。

步骤 11:将 Low 分配为 1,High 分配为项数。

步骤 12:打开一个带有条件 ( keynum!=array[mid] && low <= high) 的“do while”循环,直到条件满足。keynum = 搜索元素。

步骤 13:使用公式 (low + high) / 2 计算中间元素。

步骤 14:使用“if”条件检查 Keynum 是否小于数组中间元素。如果是,则 high = mid - 1

步骤 15:否则检查 keynum 是否小于数组中间元素,如果是则 low = mid + 1

步骤 16:使用“if”条件检查 keynum 是否等于数组中间元素。如果是,则打印搜索成功。

步骤 17:否则打印搜索失败并退出 C 程序。

C 语言源代码

                                          
#include <stdio.h>
 
void main()
{
    int array[10];
    int i, j, num, temp, keynum;
    int low, mid, high; 
    printf("Enter the value of num \n");
    scanf("%d", #);
    printf("Enter the elements one by one \n");
    for (i = 0; i < num; i++)
    {
        scanf("%d", &array;[i]);
    }
    printf("Input array elements \n");
    for (i = 0; i < num; i++)
    {
        printf("%d\n", array[i]);
    }
    /*  Bubble sorting begins */
    for (i = 0; i < num; i++)
    {
        for (j = 0; j < (num - i - 1); j++)
        {
            if (array[j] > array[j + 1])
            {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
    printf("Sorted array is...\n");
    for (i = 0; i < num; i++)
    {
        printf("%d\n", array[i]);
    }
    printf("Enter the element to be searched \n");
    scanf("%d", &keynum;);
    /*  Binary searching begins */
    low = 1;
    high = num;
    do
    {
        mid = (low + high) / 2;
        if (keynum < array[mid])
            high = mid - 1;
        else if (keynum > array[mid])
            low = mid + 1;
    } while (keynum != array[mid] && low <= high);
    if (keynum == array[mid])
    {
        printf("SEARCH SUCCESSFUL \n");
    }
    else
    {
        printf("SEARCH FAILED \n");
    }
}
                                      

输出

Enter the value of N
4

Enter the elements one by one
3
1
4
2

Input array elements
3
1
4
2

Sorted array is...
1
2
3
4

Enter the element to be searched
4

SUCCESSFUL SEARCH