1. 程式人生 > >c++排序之二分法

c++排序之二分法

1. 二分法查詢是一種非常高效的搜尋方法,主要原理是每次搜尋可以拋棄一半的值來縮小範圍。

在離散數學中,如果f(n)是在規模為n的搜尋序列中搜索一個元素所需要的比較次數,當n是偶數時,f(n)= f(n/2)+2

2. 二分法查詢的時間複雜度是O(logn)

3. 二分法查詢的適用情況一般滿足以下幾點:(1). 該陣列資料量巨大;{2}. 該陣列已經排序;(3). 一般要求找到的是某一個值

4. 什麼時候我們可以大致判定該題需要用到二分法:(1). 需要對一道時間複雜度為n的題目進行優化;(2). 在題目中提到給到的陣列已排序;(3). 只搜尋一個值或一個位置

5. 二分法的基本程式碼如下:對於特定的題只需要修改某些細節即可。

#include <iostream> 
using namespace std;
int search(int arr[10],int target){
		int start = 0;
	int end = 9;
	while(start+1<end){
		int mid = (start + end)/2;
		if(arr[mid]<target){
			start = mid;
		}
		if(arr[mid]>target){
			end = mid;
		}
		if(arr[mid]==target){
			return mid;
		}
		if(arr[start]==target){
			return start;
		}
		if(arr[end]==target){
			return end;
		}
	}
	return -1;
	
}
int main (){
	int _arr[10];
	for(int i = 0; i < 10; ++ i){
		cin >> _arr[i];
	}
	int _target;
	cin >> _target;
	if(search(_arr,_target)==-1){
		cout << "No , the number doesn't exist in the array!" <<endl;
	}
	else {
		cout <<"Yes,I find the number at " <<search(_arr,_target)+1<<" in the array!" <<endl;
	}
}