c语言二分法

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3
 4 int Search(int *a,int key)
 5 {//在顺序表中折半查找key的元素,若找到返回元素下标,否则返回0
 6     int low=0,mid;
 7     int high=20;
 8     while(low<=high)
 9     {
10         mid=(low+high)/2;
11         if(key==a[mid]) return mid;    //找到待查元素
12         else if(key<a[mid]) high=mid-1;//继续在前半区查找
13         else low=mid+1;                //在后半区查找
14     }
15     return 0;                          //未找到
16 }
17
18 void main()
19 {
20     int *a,key,i;
21     int b[20]={0};
22     a=b;
23     printf("请输入从大到小的20个整数:\n");
24     for(i=1;i<=20;i++)
25     {
26         scanf("%d",&b[i]);
27
28     }
29     printf("\n");
30     printf("请输入你要查找的数:\n");
31     scanf("%d",&key);
32
33     if(!Search(a,key)) printf("要查找的数不在目标数组中!\n");
34     else printf("你要查找的数的序号是:%d \n",Search(a,key));
35 }  
时间: 2024-08-29 14:43:10

c语言二分法的相关文章

#C语言#二分法查找有序数组

C语言的二分法,想必很多朋友都在初学时是一个难啃的骨头,因为这是必须掌握的最基础的一种算法.在这里我分享一下这个简单的#二分法#查找有序数组 #include<stdio.h> int binary_search(int arr[],int key, int left, int right) { while (left <= right) { int mid = left + (right - left) / 2; if (a[mid]<key) { left = mid + 1;

C语言-二分法入门

输入十个数,求中间的…. #include<cstdio> int binary_search(int arr[],int SizeOfArray,int key); int binary_search(int arr[],int SizeOfArray,int key){ int left=0,mid; int right=SizeOfArray-1; while(left<=right){ mid=(left+right)/2; if(key==arr[mid]) printf(&q

计算方法-C语言二分法求根

问题: 给出方程f(x) = x^3+10x-20,求该方程在(1,2)上的根,其精度不小于10^-4 看似很简单的一个小问题,其实有很有细节值得注意,先给出代码 方法一: #include <stdio.h> #include <math.h> double f(double x) { return x*x*x+10*x-20; } int main() { double l,r,mid,ans; l = 1; r = 2; while(1) { mid = (l+r)/2; d

c语言二分法查找数组中一个数字的下标位置

int binary_search(int arr[], int k, int left, int right) { //int right = sizeof(arr) / sizeof(arr[0]) - 1;放在这里错误,arr是指针,长度为4个字节,right=0 while (left <= right) { int mid = left + (right - left) / 2;//每次都要改变,所以要循环 if (arr[mid] > k) { right = mid - 1; }

C语言:“冒泡排序”与“二分法”

1.冒泡排序: what:将元素进行两两比较,大的(小的)向后排. when:数组中有多个元素,需要进行比较排序比较的时候使用. how:N个数字来排队,两两比较小靠前.(升序) 外层循环:N-1(控制比较的轮数) 内层循环:N-1-i(控制每轮比较的的次数,i代表外层循环变量) for example: int num[5];int i,k,j,temp;for(i=0;i<5;i++){printf("请输入5个元素\n");scanf("%d",&

C语言之基本算法23—二分法求方程近似根

//二分法! /* ======================================================== 题目:用二分法求解方程3x^3-2x^2-16=0的近似解. ========================================================= */ #include <stdio.h> #include <math.h> double hs(double t) { return 3*t*t*t-2*t*t-16;/

JavaSE语言基础之数组二分法查找

一.概念: 算法:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较, 如果当前位置arr[k]值等于key,则查找成功: 若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1]: 若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high], 直到找到为止,时间复杂度:O(log(n)).(摘自百度百科) 二.代码 int[] arr

二分法查找(C语言)

二分法是一种高效的查找方法,其适用于已经排好序的数组 基本思路 从数组最中间的数开始查找判断,若不是需要查找的数字,则比较大小,之后则在从中间分开的两边中的一边从最中间开始查找判断,以此类推 算法描述 这里以升序数组为例,降序数组类似 记录数组最中间数的下标,将其中的数与要查找的数进行比较 若相等,停止查找,若大于要查找的数,则将数组下标上限换为较大半区的最小下标:若小于要查找的数,则将数组下标的下限换为较小半区的最大下标 重复第一步,直到数组下标不能调换,若查找到则停止查找,若未找到,则返回不

C语言的算法--------二分法查找

int find(int n,int a[],int l){int low=0;int high=l-1;int middle=0;while(low<high){middle=(low+high)>>1;if(n==a[middle]){printf("%d,%d",n,middle);return 1; }else if(n>a[middle])low=middle+1; elsehigh=middle-1; } return 0; } int main()