C++数组的二分法查找
2016-05-05 21:30
393 查看
#include <IOSTREAM> using namespace std; /*二分法查找*/ int find(int, int [], int);//二分法查找 void line(int [], int);//冒泡排序 int main() { int a[] = {13,2,4,7,9,123,456,5,8,12,666,888,999,1234,3,11,22}; int n = sizeof(a)/sizeof(int); line(a,n);//(按址传递)传递数组名,即数组的地址 int num; while (num != -111) { cout<<"请输入你要查找的数字:"; cin>>num; int i = find(num, a, n); if (i == -1) { cout<<"未找到你输入的数字。"<<endl; } else cout<<"你要找的数字在第"<<i+1<<"个。"<<endl; } return 0; } int find (int k, int m[], int n)//二分法查找 { int f = 0, l = n-1, i; while(f<=l)//查找过程中,f和l的值一致在靠近...直到f=l完成最后一次比对才停止。 { i = (f+l)/2;//小数时四舍五入划分到另一半中,不会漏失比较。 if (m[i] == k) { return i; } else if (m[i] < k) { f = i + 1; } else l = i - 1; } return -1;//未比对到要找的数字时,返回一个标示(如:return n;也可以。)。 } void line(int a[], int n)//升序排序 { int i,j,t; for (i=1; i<n; i++) { for (j=0; j<(n-i); j++) { if (a[j]>a[j+1]) { t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } } cout<<"自动排序后的a[]={"; for (i=0; i<n; i++) { cout<<a[i]; if (i!=(n-1)) { cout<<','; } } cout<<'}'<<endl; } /* 自动排序后的a[]={2,3,4,5,7,8,9,11,12,13,22,123,456,666,888,999,1234} 请输入你要查找的数字:2 你要找的数字在第1个。 请输入你要查找的数字:123123 未找到你输入的数字。 请输入你要查找的数字:1234 你要找的数字在第17个。 请输入你要查找的数字:13 你要找的数字在第10个。 请输入你要查找的数字:8 你要找的数字在第6个。 请输入你要查找的数字:-111 未找到你输入的数字。 Press any key to continue */
相关文章推荐
- C语言中的移位操作
- leetcode 13 Roman to Integer C++
- 【C++】VS2010将写好的程序打包成安装文件发布
- 《高质量C++/C编程指南》代码规范笔记
- PAT (Advanced Level) Practise 1102 Invert a Binary Tree PAT 1102 坑点
- leetcode 92 Reverse Linked List II C++
- C语言内存分配方式
- More Effective C++----异常 & (9)使用析构函数防止资源泄漏
- C++中引用类型
- [Assignment] C++1
- 【C/C++】类中的static成员、static const成员和const成员
- [C/C++] main函数执行前后还会发生什么
- Effective C++ 改善程序与设计的55个具体做法之条款37
- C语言中字符串的格式化
- c语言
- C++异常
- hashtable笔记 c++
- 数组型队列(queue)的使用(支持自定义数据类型)(C++版)
- Leetcode 17. Letter Combinations of a Phone Number
- C++第五次实验-项目1:数组分离