2017-02-28 6 views
-2

私は数nを持っているバイナリ検索と同じように動作するアルゴリズムをしたい、の3を言わせて、そして配列:次のようにC++が第一の数のアルゴリズムを検索= N

array[10] = {1,2,3,3,3,3,3,3,3,4,5,6} 

私は配列の位置2に最初の3が表示されるため、アルゴリズムはp = 2を返します。

このアルゴリズムでは、配列が既にソートされていると仮定します。

私はバイナリ検索の使い方を知っていますが、最初にnの代わりにnという配列を最初に作る方法がわかりません。 STDの

+2

[std :: lower_bound](http://en.cppreference.com/w/cpp/algorithm/lower_bound) – Galik

+1

質問には関係ありませんが、12要素で配列を初期化することに気付きましたか? –

+4

バイナリ検索との一致が見つかったら、左に進むことができます。 – nbro

答えて

0

探しているもののようですLOWER_BOUND必要な。

#include<bits/stdc++.h> 
using namespace std; 

int main() 
{ 
    int no,x; 
    int A[12345]; 
    cout<<"Enter no of array elements : "; 
    cin>>no; 
    cout<<"Enter array elements : "; 
    for (int i=0;i<no;i++) 
    { 
     cin>>A[i]; 
    } 
    cout<<"Enter no to be searched for : "; 
    cin>>x; 
    int low = 0; 
    int high = no-1; 
    while(low<high) 
    { 
     int mid = low + (high-low)/2; 
     if (A[mid]>=x) 
     { 
      high = mid; 
     } 
     else 
     { 
      low = mid+1; 
     } 
    } 
    cout<<"Found at : "<<high; 
    return 0; 
} 
0
# Binary Search First Element function 
def BSFE(begin, end, array, num): 
    if end-begin <= 1: 
     if array[begin] == num: 
      return begin 
     elif array[end] == num: 
      return end 
     else: 
      return -1 
    else: 
     mid = (begin + end) >> 1; 
     if array[mid] >= num: 
      return BSFE(begin, mid, array, num) 
     else: 
      return BSFE(mid, end, array, num) 

# main 
array = [1, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 6] 
n = 3 
print(BSFE(0, len(array)-1, array, n)) 

はPythonで書きます。あなたはC++だけを知っていれば疑似コードとして扱うことができます。これは、マージソートの簡略版のようなものです。