zoukankan      html  css  js  c++  java
  • c语言折半查找

      折半查找又称为二分查找,它的前提是线性表中的记录必须是有序的(通常从小到大有序),线性表必须采用顺序存储.

      折半查找的基本思想是 : 在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找.不断重复上述过程,直到查找成功 或所有查找区域无记录,查找失败.

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 //折半查找,又称为二分查找 ,条件保证要好排序的, 不适合应用在 频繁的插入操作,因为会打乱顺序
     5 int Binary_Search(int *a,int n,int key)
     6 {
     7     int low,high,mid;
     8     low = 0;    //定义最低下标为记录首位
     9     high = n;   //记录最高下标为记录末位
    10 
    11     while ( low <= high )
    12     {
    13         mid = (low + high) / 2;
    14         if (key < a[mid]) {
    15             high = mid - 1;//最高位下标调小 一位
    16         } else if(key > a[mid]){
    17             low = mid + 1; //最低下标调整到中位下标大一位
    18         } else{
    19             return mid; //代表就是次位置
    20         }
    21     }
    22     return -1; //没有找到返回-1
    23 }
    24 
    25 void main()
    26 {
    27     int a[] = {1,2,3,4,5,6,7,8,9,10};
    28 
    29     //需求要查找8, 如果用传统的方式 要查找8次才能得出
    30     int index;
    31     index = Binary_Search(a, sizeof(a) / sizeof(int),8);
    32 
    33     if (index == -1)
    34         printf("没有找到");
    35     else
    36         printf("找到了,index为:%d",index);
    37 }
  • 相关阅读:
    软件项目版本号的命名规则及格式介绍
    软件项目版本号的命名规则及格式介绍
    够用一辈子的几句话
    十四个ASP.NET基础知识问答(C#版)
    够用一辈子的几句话
    够用一辈子的几句话
    软件项目版本号的命名规则及格式介绍
    leveldb java 版本
    Java List 的merge
    HBase 之mapreduce 提升
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/6051517.html
Copyright © 2011-2022 走看看