「アルゴリズムの分析と実践」 - 仕事の半分を見つけるために3順次検索

XはT、出力xがある場合、ソート配列T [1 ... n]は、xを求める
T Jの添字; XはT、J = 0の出力されない場合。

まず、順次検索

名前が示す検索して見つける一つの注文1のオーダーです。ちょうどあなたが自分自身を見つける、そこから書類を取得するためにナイフのよう、あなたはあなたがあなた自身の論文を見つけるまで、一つ一つを断る必要があります。
この問題では、インデックスに応じて一つ一つを見つけます。
コード:

void search(int x){
    int j=0,i;
    for(i=1;i<=n;i++){
        if(T[i]==x){
            j=i;
            break;
        }
    }
    printf("%d\n",j);
}

ループの合計は、時間計算量はO(N)である見つけるためにので、1からnまでです。

第二に、バイナリ検索

また、ソートにその番号の真ん中が少なく、我々が探している数を超える場合、真ん中から半分のアレイ(大並んへの小さな仮定して)、その後、上にされ、バイナリ検索として知られて検索バイナリハーフオープン配列の最初の半分にこの方法に従ってを探して。それは数よりも大きい場合、我々は、配列の後半で半分を見つけるために探しています。
コード:

void search(int x){
    int low,mid,high,j=0;
    low=1;
    high=n;
    while (low<high) {
        mid=(low+high)/2;
        if(T[mid]<x)
            low=mid+1;
        else if(T[mid]>x)
            high=mid-1;
        else if(T[mid]==x){
            j=mid;
            break;
        }
    }
    printf("%d\n",j);
}

このメソッドは、常に1/2を取ります。
4分の1〜2分の1から1/8まで......
したがって、時間複雑度は、O(LOGN)。

コードはGitHub上:のGitHubのアドレス
歓迎批判-

公開された10元の記事 ウォンの賞賛0 ビュー159

おすすめ

転載: blog.csdn.net/fanqyoo/article/details/104780492