Binary Search 二分尋找,二分搜尋 C++

來源:互聯網
上載者:User
// BSearch.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include <iostream>using namespace std;template <class T>void PrintfNum(T a[],const int& n);/*** search n in a[], return the index, if not find, return -1.*/template <class T>int BSearch(T a[],const int& length,const int& n){int left = 0, right = length - 1;while(left <= right){int middle = (left + right) / 2;//cout << "middle:" <<middle << " ,left:" << left << " ,right:" << right << endl;if(n < a[middle]){right = middle - 1;}else if(n > a[middle]){left = middle + 1;}else{return middle;}}return -1;}/*** A better one* search n in a[], return the index, if not find, return -1.*/template <class T>int BetterBSearch(T a[],const int& length,const int& n){  int left = -1, right = length - 1;while(left+1 != right){  //left < right && a[left] < n <= a[right]int middle = (left + right) / 2;if(a[middle] < n){      //a[left] < nleft = middle;}else{                  //a[right] >= nright = middle;}}if(right >= length || a[right] != n )//no findreturn - 1;return right;}/*** Test function*/bool TestBSearch(){const int NUM = 20;int BeginNum = 10;int t[NUM];for(int i = 0; i< NUM; ++i){t[i] = BeginNum;++BeginNum;}bool result = true;    for(int j = 0 ;j < NUM; ++j){if(BSearch(t, NUM , t[j]) != j){result = false;}}// test no findif(BSearch(t,NUM,t[0] - 1) != -1 || BSearch(t,NUM,t[NUM-1] + 1) != -1){result = false;}return result;}/*** Test function*/bool TestBetterBSearch(){const int NUM = 20;int BeginNum = 10;int t[NUM];for(int i = 0; i< NUM; ++i){t[i] = BeginNum;++BeginNum;}bool result = true;    for(int j = 0 ;j < NUM; ++j){if(BetterBSearch(t, NUM , t[j]) != j){result = false;}}// test no findif(BetterBSearch(t,NUM,t[0] - 1) != -1 || BetterBSearch(t,NUM,t[NUM-1] + 1) != -1){result = false;}return result;}int main(int argc, char* argv[]){const int NUM = 10;int t[NUM] = {10,11,12,13,14,15,16,17,18,20};PrintfNum(t,NUM);for(int i = 0 ;i < NUM; ++i){       cout << t[i] << " was at index: " << BSearch(t, NUM , t[i]) << endl; }cout << "searching 100 in array t, result: "<< BSearch(t, NUM , 100) << endl;cout << endl;cout << "BSearch test result:" << TestBSearch() << endl;cout << "BetterBSearch test result:" << TestBetterBSearch() << endl;return 0;}template <class T>void PrintfNum(T a[],const int& n){for(int i = 0; i < n; ++i){cout << a[i] << ",";}cout << endl;}


http://www.waitingfy.com/?p=464

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.