算法:折半查找法

输入代码:

/*
 * Copyright (c) 2014, 烟台大学计算机学院
 * All rights reserved.
 * 文件名称:sum123.cpp
 * 作    者:林海云
 * 完成日期:2015年1月12日
 * 版 本 号:v2.0
 *
 * 问题描述:给定一个排序好的数组,使他可以具备查找功能
 * 输入描述:要查找的数
 * 程序输出:查找数的位置
 */
#include<iostream>
using namespace std;
const int n=10;
int main()
{
    int a[n]= {1,2,3,4,5,6,7,8,9,10} ;
    int left,right,mid,x;
    left=0;
    right=n-1;
    while(cin>>x&&left<=right)
    {
        mid=(left+right)/2;
        if(a[mid]==x)
        {
            cout<<"查到数字为a["<<mid<<"]"<<endl;
        }
        if(a[mid]<x)
        {
            left=mid+1;
        }
        else
        {
            right=mid-1;
        }
    }
    return 0;
}

运行结果:

总结:

此算法查找的依据是从左往右依次查找,用一个while语句控制的循环实现,在mid的left处就加1继续查找,在右边的就减1继续查找,直到找到为止。

时间: 2024-10-17 00:24:42

算法:折半查找法的相关文章

对分查找法(二分查找法,折半查找法)

二分查找法是针对已经排好序的序列进行查找 每次折半查找 算法时间复杂度,对于长度为N的序列,每次执行N/2,假设k次结束,最后到第一个N/2^k=0,所以k=logN 时间复杂度logN int binarysearch(const int array[], int x, int N) { int low, mid, high; low = 0, high = N - 1; while (low <= high) { mid = (low + high) / 2; if(array[mid] <

小朋友学数据结构(6):折半查找法

小朋友学数据结构(6):折半查找法 折半查找法又称为二分查找法. (一)基本思想 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功:否则利用中间位置记录将表分成前.后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表. 重复以上过程,直到找到满足条件的记录,此时查找成功:或直到子表不存在为止,此时查找不成功. 2.png (二)时间复杂度 二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x

【分治】折半查找法

问题 K: [分治]折半查找法 时间限制: 1 Sec  内存限制: 128 MB提交: 17  解决: 9[提交][状态][讨论版] 题目描述 大魔导师培根曾经说过:“读书使人明智,读诗使人聪慧,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人善辩.”由此可见书籍的重要性是不言而喻的.而与书籍天天打交道的图书管理员,更是夺天地之造化,吸日月之精华的“神之职业”.据史料记载,魔法世界从古至今诞生的众多不平凡的人物中,有不少人都曾经做过“图书管理员”,如道家学派创始人老子,威软公司创始人

查找算法--折半查找

本小节知识点:1. [掌握]基本思路2. [掌握]实现步骤3. [了解]练习 ##1.基本思路- 在有序表中,取中间元素作为比较对象,若给定值与中间元素的要查找的数相等,则查找成功;若给定值小于中间元素的要查找的数,则在中间元素的左半区继续查找; - 若给定值大于中间元素的要查找的数,则在中间元素的右半区继续查找.不断重复上述查找过 程,直到查找成功,或所查找的区域无数据元素,查找失败. ##2.实现步骤- 在有序表中,取中间元素作为比较对象,若给定值与中间元素的要查找的数相等,则查找成功;-

折半查找法的两种实现

折半查找法: 在有序表中,把待查找数据值与查找范围的中间元素值进行比较,会有三种情况出现: 1)     待查找数据值与中间元素值正好相等,则放回中间元素值的索引. 2)     待查找数据值比中间元素值小,则以整个查找范围的前半部分作为新的查找范围,执行1),直到找到相等的值. 3)     待查找数据值比中间元素值大,则以整个查找范围的后半部分作为新的查找范围,执行1),直到找到相等的值 4)     如果最后找不到相等的值,则返回错误提示信息. 按照二叉树来理解:中间值为二叉树的根,前半部

折半查找法的温习

折半查找法适合于1采用顺序存储结构的2必须按照关键字大小排序的序列查找 如代码所示: 1 #include <stdio.h> 2 3 int BinSearch(int a[], int length, int k) 4 { 5 int low = 0, high = length - 1; 6 int mid; 7 while(low <= high) 8 { 9 mid = (low + high) / 2; 10 if(a[mid] == k) 11 return mid; 12

C语言数组之冒泡排序+折半查找法(二分查找)

冒泡排序算法 1 int num[5]; 2 int i; 3 //循环接收用户输入的元素 4 for(i=0;i<5;i++){ 5 printf("请输入第%d个元素\n",i+1); 6 scanf("%d",&num[i]); 7 } 8 for(i=0;i<4;i++){ //外层循环,控制排序的轮数 9 int j; 10 for(j=0;j<4-i;j++){ //内层循环,控制冒牌排序每轮的次数 11 if(num[j]&g

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

java 数据结构与算法 之查找法

一.二分查找法 二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找:如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素. @Test public void searchDuty(){ Integer[]t=new Integer[]{1,2,3,4,5,6};//原数组 Integer key=10;//目标元素 Integer start=0;//开始位置 Integer end=t.length-1;//结束位置 while(start<

查找算法—折半查找

折半查找,又称为二分查找,它的前提是线性表中的记录必须是关键码有序(通常是从大到小),线性表必须采用顺序存储. 算法思想:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功: 若给定值小于中间记录的关键字,则在中间记录的左半区继续查找: 若给定值大于中间记录的关键字,则在中间记录的右半区继续查找. 不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止. 具体代码实现如下: // 用递归实现 int  binarySearch(int[] arr ,int