折半查找数组中某一元素(二分法查找)

#include <stdio.h>

int bin_search(int arr[], int size, int key)

{

int left=0;

int right=size-1;

while (left<=right)

{

int mid=(left+right)/2;

if(arr[mid]>key)

right=mid-1;

else if(arr[mid]<key)

left = mid + 1;

else

{

return mid;//如果能找到,则返回mid下标

}

}

return -1;如果找不到,则返回-1

}

int main()

{

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

int size=sizeof(arr)/sizeof(arr[0]);

int ret=bin_search(arr,size,3);//调用函数

if (ret==-1)

{

printf("not exist\n");

}

else

{

printf("%d\n",arr[ret]);

}

return 0;

}

时间: 2024-10-06 01:39:38

折半查找数组中某一元素(二分法查找)的相关文章

《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)

最近在读<数据结构.算法与应用>这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢 8. 从左至右检查数组a[0:n-1]中的元素,以查找雨x相等的那些元素.如果找到一个元素与x相等,则函数返回x第一次出现所在的位置.如果在数组中没有找到这样的元素,函数则返回-1. // // main.cpp // Test_08 // // Created

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************

写一个查找算法找出数组中相同的元素

1 import java.util.ArrayList; 2 3 public class Test { 4 5 // 原始数据data.假设data数组中的数据元素已经按照某种顺序排好. 6 // 但是,该数组中的数据元素重复出现. 7 // 我们的目的是查找.解析data数组中重复出现的某元素. 8 // 比如,在这个data数组中,元素'C'在数组位置2,3重复出现两次. 9 // 注意!有些元素没有重复出现,比如元素'B'. 10 private String[] data = { "

JS数组常用函数以及查找数组中是否有重复元素的三种常用方法

阅读目录: DS01:常用的查找数组中是否有重复元素的三种方法 DS02:常用的JS函数集锦 DS01.常用的查找数组中是否有重复元素的三种方法 1. 1 var ary = new Array("111","22","33","111"); 2 var s = ary.join(",")+","; 3 for(var i=0;i<ary.length;i++) { 4 if(s.

解析、查找数组中重复出现的元素(Java)

 解析.查找数组中重复出现的元素,Java实现. <数据结构与算法分析:解析.查找数组中重复出现的元素> 问题描述:一个结构化数据,假设事先按照某种顺序排好序(比如升序)的一个数组中,无规则.重复出现若干次某个相同元素,形如有序数组data: data = {  "A", "A", "B", "C", "C", "D", "D" , "D&q

用最小的内存和二分法查找数组中是否存在这个数

package Test; public class Test { //用最小的内存查找数组中是否存在这个数 public static void main(String[] args) { int [] arr = {12,2,3,4,5,6,7,8,90,76,43}; byte[] byt = new byte[100]; for (int i = 0; i < arr.length; i++) { byt[arr[i]] = 1; } int n = 13; if(byt[n] == 1

9.11排序与查找(三)——给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素

/** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组被旋转过了,则寻找拐点. * @param a * @param left * @param right * @param x:要搜索的元素 * @return */ public static int search(int[] a,int left,int right,int x){ int mid=(

在Java中判断数组中包含某个元素的几种方式的比较

闲来无事,将java中判断数组中包含某个元素的几种方式的速度进行对比,直接上代码 talk is cheap, show you the code package test.contain.lishaojie; import java.util.Arrays;import java.util.HashSet;import java.util.Set; public class TestContain { /** * @param args */ public static void main(S

【编程题目】旋转数组中的最小元素☆

69.旋转数组中的最小元素(数组.算法).题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个排好序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为 1. 我就用了最简单的方法.而且开始还没考虑1, 0, 1 ,1这样的情况 /* 69.旋转数组中的最小元素(数组.算法). 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个 排好序的数组的一个旋转