二分查找
Posted 新生代黑马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。
题目描述
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
输入描述
第一行输入n,代表数组的长度
第二行输入n个数
第三行输入要查找的key值
输出描述
输出一整数,表示key所在数组位置的下标,从0开始
输入样例
5 1 3 5 7 9 5
输出样例
2
测试代码
#include <stdio.h> #include <stdlib.h> int getPos(int *a, int n, int key) { int low, high, mid; low = 0, high = n - 1; while (high >= low) { mid = (low + high) / 2; if (key > a[mid]) { low = mid + 1; } else if (key < a[mid]) { high = mid - 1; } else { while (a[mid] == a[mid - 1]) { mid--; } return mid; } } return -1; } int main() { int n, key; scanf("%d", &n); int *a = (int *)calloc(n, sizeof(int)); for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } scanf("%d", &key); printf("%d\n", getPos(a, n, key)); free(a); return 0; }
以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章