精华内容
下载资源
问答
  • 算法描述就是将要查找的数先与此组数中间的数比较,若要查找的数比此组数中间的数大,则将这中间的数变为新的数组第一个元素,若要查找的数比此组数中间的数小,则将这中间数变为新的数组最后一个元素,再在新的...

    折半查找是有序数组查找的最简单的方法。算法描述就是将要查找的数先与此组数中间的数比较,若要查找的数比此组数中间的数大,则将这个中间的数变为新的数组第一个元素,若要查找的数比此组数中间的数小,则将这个中间数变为新的数组最后一个元素,再在新的数组里面找寻最中间的数,与要查找的数比较,以此循环,直到找到要找的数。具体实现代码如下:

    #include#include

    int main()

    {

    int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };  //定义一个含有十个元素的数组

    int left = 0;  //首元素下标

    int right = sizeof(arr) / sizeof(arr[0])-1;  //最后一个元素下标  因为数组下标是从0开始,所以要减1

    int num = 9;      //要查找的数

    while (left <= right)

    {

    int mid = left + (right - left) / 2;      //首元素下标与最后一个元素下标平均值  此语句必须放在循环里面

    if (num == arr[mid])                      //当要找的数和中间数相等时,证明找到了

    {

    printf("找到了:%d\n",mid);

    break;

    }

    if (num > arr[mid])                       //当找的数大于中间数时,将首元素变为中间数加一

    {

    left = mid + 1;

    }

    if (num < arr[mid])                       //当要找的数小于中间数时,将最后一个元素变为中间数减一

    {

    right = mid - 1;

    }

    }

    if (left > right)                      //如果循环完了还没有找到要查找的数,则说明此数组里面没有要查找的数,故找不到,打印输出找不到

    {

    printf("找不到\n");

    }

    system("pause");

    return 0;

    }

    展开全文
  • 折半查找的效率比较高,但是前提条件是数组中的元素按序排列。 练习:查找一个元素在数组中第次出现的位置,如果数组中没有此元素,则返回-1; public class ArrayTest3{ public static void main(String[] ...

    折半查找的效率比较高,但是前提条件是数组中的元素按序排列。

    练习:查找一个元素在数组中第一次出现的位置,如果数组中没有此元素,则返回-1;

    public class ArrayTest3{
        public static void main(String[] args){
            int[] arr={1,3,4,6,8,9,10};
            int index=HalfSearch(arr,4);
            System.out.println("index="+index);
        }
        public static int HalfSearch(int[] arr,int key){
            int min=0;
            int max=arr.length-1;
            int mid=(min+max)/2;
            while(arr[mid]!=key){
                if(key>arr[mid])
                    min=mid+1;
               else 
                    max=mid-1;
               if(min>max)
            	   return -1;
                   mid=(min+max)/2;
                    
            }
            return mid;
        }
    }
    
    折半查找的另一种方式:

    public class ArrayTest4{
        public static void main(String[] args){
            int[] arr={1,3,4,6,8,9,10};
            int index=HalfSearch_2(arr,4);
            System.out.println("index="+index);
        }
        public static int HalfSearch_2(int[] arr,int key){
            int min=0;
            int max=arr.length-1;
            int mid;
            while(min<=max){
            	mid=(min+max)/2;
                if(key>arr[mid])
                    min=mid+1;
               else if(key
       

    展开全文
  • 思路:先把中间元素找到,寻找的元素在中间元素左边...再继续折半找中间元素寻找。#include#include#includeintBinary(intx,intarr[],intleft,intright){intmid=0;while(left<=right){intmid=left-(left-right)/2...

    思路:

    先把中间元素找到,寻找的元素在中间元素左边,则小于中间元素,改变right。再继续折半找中间元素寻找。

    #include

    #include

    #include

    int Binary(int x, int arr[], int left, int right)

    {

    int mid = 0;

    while (left <= right)

    {

    int mid = left - (left - right) / 2;

    if (x > arr[mid])

    {

    left = mid + 1;

    }

    else if (x 

    {

    right = mid - 1;

    }

    else

    {

    return mid;

    }

    }

    return -1;

    }

    int main()

    {

    int arr[] = { 1, 3, 4, 6, 7, 8, 56, 67, 78 };

    int size = sizeof(arr) / sizeof(arr[0]);

    int ret = Binary(78, arr, 0, size - 1);

    if (ret == -1)

    {

    printf("not exsit");

    }

    else

    {

    printf("%d", ret);

    }

    system("pause");

    return 0;

    }

    展开全文
  • 在该程序中,实现了在10个元素中查找20,用了顺序查找方法和折半查找方法。
  • 递增数组元素折半查找 *******/ #include #include int binsearch(int x, int v[], int n) //数组一定是有序排列 { int mid; //中间量 int left = 0; int right = n - 1; while (left ) { mid = ...
    /******
    递增数组元素的折半查找
    *******/
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    int binsearch(int x, int v[], int n)   //数组一定是有序排列
    {
    	int mid;   //中间量
    	int left = 0;
    	int right = n - 1;
    
    
    	while (left < right)
    	{
    		mid = (right + left) / 2;
    		if (v[mid] > x)
    		{
    			right = mid - 1;   //-1操作提高效率
    		}
    		else if (v[mid] == x)
    		{
    			return mid;
    		}
    		else
    		{
    			left = mid + 1;
    		}
    	}
    }
    
    int main(void)
    
    {
    	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    	int ret = binsearch(8, arr, 9);
    	printf("%d\n",arr[ret]);
    
    }

    展开全文
  • 题目是:写两自定义函数,第一个函数实现10个元素进行从大到小的排序;第二函数实现10排好序的元素进行折半查找,如果找到了返回对应的元素下标值,否则返回0。编写相应的主函数测试。 两自定义函数...
  • 折半查找

    2020-09-14 12:55:03
    折半查找首先将定值key与表中中间位置的元素比较,若相等,则查找成功,并返回该元素的存储位置;若不等,则所需查找到的元素只能在中间元素以外的前半部分或后半部分;例如,在查找表升序排列时,若给定值key大于...
  • 然后在缩小的区间中继续进行同样的查找,如此重复直到找到为止,如果查找区间缩小到只有一个元素,其关键字仍不等于k,则查找失败。 每进行一次键值与给定值的比较,查找区间的长度至少减少为原来的二分之。 ...
  • 算法 - 折半查找(C#)

    万次阅读 多人点赞 2019-03-14 20:09:56
    分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net /* * Recursive Binary Search - by Chimomo * * [折半查找的前提]: * 1、待...
  • 二分折半查找使用前提是数组是有序。 题目分析: 通过观察发现,本题目要实现查找指定数值在元素有序的数组中存储的位置(索引),返回该位置(索引)。 我们使用数组最中间位置的元素值与要查找的指定数值...
  • 使用折半查找算法,题目要求如图: 下面展示 处理代码。 #include<stdio.h> int main(){ int N; printf("请输入要查询的有序数组的长度:\n"); scanf("%d", &N); int array[N]; printf("请输入要...
  • 查找之折半查找

    2017-12-03 16:22:29
    /* 名称:折半查找 说明:这是比顺序查找要更有效率的种方式。它是按照每次减少一半的规模进行查找的。但是其存储结构必须要是顺序结构,即连续的存储空间,而且...*///折半查找(n为元素个数,key为待查找元素)
  • public class 折半查找元素法 { public static void main(String args[]) { System.out.println("请输入您需要查找的数字:"); Scanner count=new Scanner(System.in); int FIND_COUNT=count.nextInt(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,970
精华内容 11,188
关键字:

对100个元素进行折半查找