设为首页 加入收藏

TOP

折半查询(二分搜寻法)(一)
2013-12-13 18:04:54 】 浏览:1074
Tags:查询 二分 搜寻

  说明

  如果搜寻的数列已经有排序,应该尽量利用它们已排序的特性,以减少搜寻比对的次数,这是搜寻的基本原则,二分搜寻法是这个基本原则的代表。

  解法

  在二分搜寻法中,从数列的中间开始搜寻,如果这个数小于我们所搜寻的数,由于数列已排序,则该数左边的数一定都小于要搜寻的对象,所以无需浪费时间在左边的数;如果搜寻的数大于所搜寻的对象,则右边的数无需再搜寻,直接搜寻左边的数。

  所以在二分搜寻法中,将数列不断的分为两个部份,每次从分割的部份中取中间数比对,例如要搜寻92于以下的数列,首先中间数索引为(0+9)/2 = 4(索引由0开始):

  [3 24 57 57 67 68 83 90 92 95]

  由于67小于92,所以转搜寻右边的数列:

  3 24 57 57 67 [68 83 90 92 95]

  由于90小于92,再搜寻右边的数列,这次就找到所要的数了:

  3 24 57 57 67 68 83 90 [92 95]

  实例

  Java写法

  public class BinarySearch {

  public static int search(int[] number, int des) {

  int low = 0;

  int upper = number.length - 1;

  while(low <= upper) {

  int mid = (low+upper) / 2;

  if(number[mid] < des)

  low = mid+1;

  else if(number[mid] > des)

  upper = mid - 1;

  else

  return mid;

  }

  return -1;

  }

  public static void main(String[] args) {

  int[] number = {1, 4, 2, 6, 7, 3, 9, 8};

  QuickSort.sort(number);

  int find = BinarySearch.search(number, 3);

  if(find != -1)

  System.out.println("找到数值于索引" + find);

  else

  System.out.println("找不到数值");

  }

  }

  C写法

  #include <STDIO.H>

  #include <STDLIB.H>

  #include <TIME.H>

  #define MAX 10

  #define SWAP(x,y) {int t; t = x; x = y; y = t;}

  void quicksort(int[], int, int);

  int bisearch(int[], int);

  int main(void) {

  int number[MAX] = {0};

  int i, find;

  srand(time(NULL));

  for(i = 0; i < MAX; i++) {

  number[i] = rand() % 100;

  }

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇N个数字中两个数的最大公约数 下一篇中国剩余定理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目