c語言實現數組的二分查找

二分查找是一種效率比較高的查找順序表中的元素的方法,其時間複雜度爲O(log2n)。

具體代碼如下所示:

#include <stdio.h>
#include <stdlib.h>
int cmp(int *a,int *b){//define a function used for the function qsort.
    return (*a)-(*b);
}
int main(){
    int a[100];
    printf("Please input the length of the array :");
    int n; //define the array length
    scanf("%d",&n);
    printf("Please input the number that in your array.\n");
    for(int i=0;i<n;i++){//Initialization the array.
        scanf("%d",&a[i]);
    }

    qsort(a,n,sizeof(int),cmp);//sort the array and let it in ascending order.
    for(int i=0;i<n;i++){
        printf("%d ",a[i]);
    }
    printf("\nPlease input the number that you want to find :");
    int number;//define the number that you want to find.
    scanf("%d",&number);
    int low=0,high=n-1,middle,location;
    //low:pointed to the lowest subscript of the array.
    //high:pointed to the largest subscript of the array.
    //middle:pointed to the middle subscript of the array.
    //location:represent the real location of the number that you want find.
    if(number>a[high]||number<a[low]){//In this way ,the number is overflow from the array.
        printf("The number is overflow from the array.\n");
    }else{
        int flag=0;
        while((!flag)&&low<=high){//If we not find the number and "low" is lower than "high",do this loop.
             middle=(low+high)/2;
            if(number==a[middle]){//OK,we find the target number.
                location=middle;//noted the subscript
                flag=1;
                break;//break the loop
            }else if(number<a[middle]){//update the high value
                high=middle-1;
            }else if(number>a[middle]){//update the low value
                low=middle+1;
            }
        }
        if(flag){//We find the target number ,print the result
            printf("We can find the number %d ,it's location is %d.\n",number,location);
        }else{//We don't find the target number,print the number.
            printf("We can not find the number %d,it doesn't in the array.\n",number);
        }
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章