101~102 . 二分查找法进价1习题
1、利用二分查找法从排好顺序(从小到大)的数组中查找重复存在的多个元素的最后 一个.
#include<iostream>
using namespace std;
int main() {
int a[9]{ 1, 2, 3, 4,4, 6,8 , 37, 100 };
int b;
int shur; //输入
int da,xiao;
int zhong;
int n = sizeof a / sizeof a[1];
int z = -1;
cin >> shur;
da = n - 1, xiao = 0;
while (da>=xiao){
zhong = (da + xiao) / 2;
if (a[zhong] > shur) {
da = zhong - 1;
}
else if(a[zhong]<shur) {
xiao = zhong + 1;
}
else {
if (n != zhong+1 && shur == a[zhong+1]) {
z = zhong+1;
break;
}
else if(shur != a[zhong + 1]){
z = zhong;
break;
}
}
}
if (z == -1) {
cout << "没有这个值.";
}
else {
cout << "数组中查找重复存在的多个元素的最后 一个的位置是[" << z << ']';
}
cout << endl;
system("pause");//卡屏函数
return 0;
}
2、利用二分查找法从排好顺序(小大到小)的数组中查找重复存在的多个元素的第一个。
#include<iostream>
using namespace std;
int main() {
int a[9]{ 1000,1000,224,56,56,43,35,20,4 };
int b;
int shur; //输入
int da, xiao;
int zhong;
int n = sizeof a / sizeof a[1];
int z = -1;
cin >> shur;
da = n - 1, xiao = 0;
while (da >= xiao) {
zhong = (da + xiao) / 2;
if (a[zhong] > shur) {
xiao = zhong+ 1;
}
else if (a[zhong] < shur) {
da = zhong -1;
}
else {
if (zhong!= 0 && shur == a[zhong - 1]) {
da = zhong - 1;
}
else if (shur != a[zhong - 1]) {
z = zhong;
break;
}
}
}
if (z == -1) {
cout << "没有这个值.";
}
else {
cout << "数组中查找重复存在的多个元素的最后 一个的位置是[" << z << ']';
}
cout << endl;
system("pause");//卡屏函数
return 0;
}