#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 */