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のアドレス
歓迎批判-