折半查找
Posted huxiaobai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折半查找相关的知识,希望对你有一定的参考价值。
#include <stdio.h> #include <stdlib.h> //先进行排序,在进行查找 void sort(int arr[10]) { int i,j,idx; for(i=0;i<9;i++) { idx =i; for(j=i+1;j<10;j++) { if(arr[idx]>arr[j]) idx = j; } if(idx!=i) { int temp = arr[i]; arr[i] = arr[idx]; arr[idx] = temp; } } } int find(int *arr,int findData) { int low=0,mid,high=9; int idx=-1; while(low<=high) { mid = (low+high)/2; if(arr[mid]==findData) { idx = mid;break; } //找的数比中间值小,不要了,包括中间值,变更最高位,减一除去了mid值 else if(arr[mid]>findData) high = mid - 1; else if(arr[mid]<findData) low = mid + 1; } return idx; } void print(int arr[10]) { for(int i=0;i<10;i++) { printf("%d ",arr[i]); } } void main() { int arr[10]; int findData,idx; for(int i=0;i<10;i++) { arr[i] = rand()%100; } print(arr); sort(arr); putchar(10); print(arr); scanf("%d",&findData); idx = find(arr,findData); if(idx!=-1) printf("I find out,it‘s arr[%d]",idx); else printf("sorry,I can‘t do it"); system("pause"); }
以上是关于折半查找的主要内容,如果未能解决你的问题,请参考以下文章