數組查找(Array Searching)

數組查找

數組查找操作


查找數組中的值可通過比較數組的值與指定值來實現,此操作有以下幾種實現方式:

線性或者序列查找


線性查找算法通過序列迭代的方式從數組中查找指定的值,直到找到或者迭代結束位置。

當數組元素列表爲無序數組並且只執行一次查找時,使用線性查找是最好的方式。其時間複雜度依賴於數組的大小。

線性查找時間複雜度:

int main(){
    int array[100],search,c,n;

    printf("輸入輸入的長度");

    scanf("%d",&n);
    printf("輸入的數值爲 %d",n);
    //爲數組元素賦值
    for (c=0;c<n;c++){
        scanf("%d",&array[c]);
    }
    printf("輸入要在數組中查找的值");
    scanf("%d",&search);

    for(c=0;c<n;c++){
        if (array[c]==search){
            printf("%d 查找的值位於索引 %d\n",serach,c+1);
            break;
        }
    }
    if (c==n){
        printf("%d 數組中不存在要查找的值",search);
    }
    return 0;


}

時間複雜度

  • 平均:O(n)
  • 最好:O(1)
  • 最差:O(n)

平均時間複雜度爲O(n)時,可能查找的元素位於元素表末尾或者數組中不存在,線性查找需要遍歷每個元素值,直到找到爲止。查找算法的時間複雜度最佳和最壞情況分別爲O(1)和O(n),因爲在第一次迭代或者在最後一次迭代時才能找到要搜索的元素。

二分查找


線性查找有一個較大的缺點,在較大的數組中查找元素時,將導致時間複雜度上升,隨着數組的增長,時間複雜度呈線性增長。在某些情況下,可以使用二分查找解決這個問題。

二分查找類似於我們查找書中一個特定的頁碼。我們在中間隨機打開書的一頁,把搜索範圍縮小到書的左邊或者右邊,當頁碼有序的情況下,這個操作最終能找到目標頁碼。

二分查找時間複雜度:O(log n)

int main(){
    int c,first,last,middle,n,search,array[100];
    printf("輸入數組元素的數量");
    scanf("%d",&n);

    printf("輸入數量爲%d的有序數組",n);
    for (c=0;c<n;c++{
        scanf("%d",&array[c]);
    })
    printf("輸入要查找的值");
    scanf("%d",&search);

    first=0;
    last=n-1;
    middle=(first+last)/2;

    while(first<+last){
        if (array[middle]<search>){
            first=middle+1;
        }else if (array[middle]==search){
            printf("查找的元素 %d 索引位置爲 %d \n",search,middle+1);
        }else{
            last=middle-1;
        }
        middle=(first+last)/2;
    }
    if (first>last)
        pintf("未能在數組中查找到目標元素: %d",serach);
    return 0;
}

更多內容,歡迎關注:


在這裏插入圖片描述

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