栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Java】和【C语言】实现一个有序数组的二分查找

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java】和【C语言】实现一个有序数组的二分查找

目录

1.二分查找介绍

2. 二分查找代码实现

2.1 Java代码实现

2.2 C语言代码实现

3. 查找的思路

3.1 mid小于要找的元素

3.2 mid大于要找的元素 

4. 二分查找优缺点


1.二分查找介绍

        二分查找也叫折半查找,首先计算数组中间的位置(元素个数除以2),将数组中间位置处的下标与查找的元素进行比较,如果相等,则查找成功;否则利用中间位置将数组分为左、右两个部分,如果中间位置的下标大于查找的元素,则查找左子表,否则查找右子表。重复上面的过程,直到找到要查找的关元素为止,否则查找失败不存在此元素。 

2. 二分查找代码实现

2.1 Java代码实现
public static int binarysearch(int[] array, int k) {
    int sz = array.length;//求数组长度
    int left = array[0];//左下标
    int right = sz - 1;//右下标
    while (left <= right) {
          int mid = (left + right) / 2;//中间下标
          if (array[mid] > k) {//要找的元素在左边
             right--;
          } else if (array[mid] < k) {//要找的元素在右边
              left++;
          } else {//找到了返回下标
              return mid - 1;//下标是从0开始的,每一个元素的下标都是 n-1
          }
    }
        return -1;
}

public static void main(String[] args) {
    int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    //int k = 7;//查找的元素
    Scanner input = new Scanner(System.in);
    System.out.print("输入要查找的元素:");
    int k = input.nextInt();//输入要查找的元素
    int ret = binarysearch(array, k);
    
    if (-1 == ret) {
       //找不到
       System.out.println("找不到,因为元素不存在");
    } else {
        System.out.println("找到了,下标是:" + array[ret]);
    }
}

2.2 C语言代码实现
#include

int binary_search(int arr[], int k, int sz)
{
    int left = 0;//左下标
    int right = sz - 1;//右下标
    while (left <= right)//左下标<=右下标说明中间还有元素要查找
    {   //中间元素的下标
        int mid = (left + right) / 2;//mid就是折半之后的数组元素个数
        //mid-1和mid+1逐渐接近要找的元素
        if (arr[mid] > k)//mid数组的下标大于k说明要找的元素在数组的左边
        {
            right = mid - 1;//mid-1赋给右边的左边
        }
        else if (arr[mid] < k)//mid数组的下标小于k说明要找的元素在数组的右边
        {
            left = mid + 1;//mid+1赋给左边的下标
        }
        else
        {
            return mid;//返回找到的下标
        }
    }
    return -1;//整个数组都查找了一遍,没有要找到要找的元素就返回-1
}
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int k = 7;//要找的元素,找到后输出它的下标
    //数组的个数=数组的总大小/数组一个元素的大小
    int sz = sizeof(arr) / sizeof(arr[0]);//sz就是数组元素的个数
    int ret = binary_search(arr, k, sz);
    if (-1 == ret)//ret等于接收的-1说明整个数组没有要找的元素
    {
        printf("找不到了n");
    }
    //ret不等于接收的-1就说明找到了
    else
    {
        printf("找到了,下标是:%dn", ret);//输出找到的元素下标
    }
    return 0;
}

3. 查找的思路

3.1 mid小于要找的元素

3.2 mid大于要找的元素 

4. 二分查找优缺点

  1. 优点是比较次数少,查找速度快,平均性能好;
  2. 其缺点是要求待查表为有序表,且插入删除困难。
  3. 因此二分查找方法适用于不经常变动而查找频繁的有序列表。

使用条件:查找序列是顺序结构,有序。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1033192.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号