二分查找(binarySearch)

随声附和 提交于 2020-03-01 12:21:00
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

void QSort(int a[], int low, int high)
{
if(low>=high) //关于这个终止条件, 在下边处理后,low可能会大于或等于high
{
return;
}
int first = low;
int last = high;
int key = a[first]; //use the first elements to be the key
while(first<last)
{

while(first<last&&a[last]>=key)
{
last--;
}
a[first] = a[last];
while(first<last&&a[first]<=key)
{
first++;
}
a[last] = a[first];
a[first] = key;
QSort(a, low, first-1);
QSort(a, first+1, high);

}

}


int NBinarySearch(vector<int> arr, int n, int target)
{
int low = 0, high = n - 1; //"low" is the low limit of search, "high" is the high limit of search
while(low<=high)
{
int middle = (low + high) / 2;
if(arr[middle]==target)
{
return middle;
}
else if(arr[middle]>target)
{
high = middle - 1;
}
else
{
low = middle + 1;
}
}

return -1; //the target is not in the array
}


int BinarySearch(vector<int> arr, int target, int low, int high)
{
if(low>high) return -1; //recursive termination conditions are always a problem that needs to be explored,when low and high are equal, if the target value can not be found, this means the target value doesn't exist
int middle = (low + high) / 2; //determines whethers the target values is equals to the value of "middle" position
if(target==arr[middle])
{
return middle;
}
else if(target>arr[middle])
{
return BinarySearch(arr, target, middle+1, high);
}
else
{
return BinarySearch(arr, target, low, middle-1);
}
}

bool com(int &a, int &b)  //this is the parameter of sort 
{
return a < b;
}
int main()
{
int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
vector<int> arr(a, a+9);
vector<int>::iterator iter = arr.begin();

sort(arr.begin(), arr.end(), com);
for(; iter!=arr.end(); iter++)
cout << *iter << " ";
cout << endl;

int result = NBinarySearch(arr, 9, 52);
cout << "the result of none_recurrence method: " << result << endl;
result = BinarySearch(arr, 52, 0, 8);
cout << "the result of recurrence method: " << result << endl;
return 0;
}

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!