二分法查找

来源:互联网 发布:单片机串口接收字符串 编辑:程序博客网 时间:2024/05/21 11:09
<span style="color: rgb(102, 102, 102); font-family: "Microsoft YaHei"; font-size: 18px; line-height: 26px;">在进行二分法查找前需要先对数据进行排序(具体排序实现详见下一篇文章),定义left(数据集的开头),right(数据集结尾)两个变量,然后在这组数据中找到mid=(left+right)/2,然后将待查找元素与mid所指元素进行比较,如果相等将索引返回,如果查找元素大于mid所指元素,则将left向右移动即left=mid+1;</span><span style="box-sizing: border-box; margin: 0px; padding: 0px; font-family: "Microsoft YaHei"; border: 0px; outline: 0px; font-size: 18px; vertical-align: baseline; color: rgb(102, 102, 102); line-height: 26px; background: transparent;">如果查找元素小于mid所指元素,则将left向左移动即right=mid-1。重复以上过程直到left>right(因为此时表明并不存在待查找元素),</span>
/* * main.c * *  Created on: 2016-10-21 *      Author: llf05 */# include <stdio.h>int serach(int *n, int data, int size){int l = 0, num = -1;int r = size-1;while(l <= r){int mid = (r+l) / 2;if (n[mid] < data){l = mid+1;}else if (n[mid] > data){r = mid-1;}else{num = n[mid];break;}}return num;}int main(){int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};printf("%d\n", serach(a, 4, 10));return 0;}

0 0
原创粉丝点击