C語言查找算法之順序查找、二分查找(折半查找)


  C語言查找算法之順序查找、二分查找(折半查找),最近考試要用到,網上也有很多例子,我覺得還是自己寫的看得懂一些。

  1. 順序查找
    /*順序查找 
    順序查找是在一個已知無(或有序)序隊列中找出與給定關鍵字相同的數的具體位置。
    原理是讓關鍵字與隊列中的數從最后一個開始(或第一個)逐個比較,直到找出與給定關鍵字相同的數為止
    它的缺點是效率低下
    */ #include<stdio.h> void main(){ int i ,num,arr[10]={3,6,9,10,65,23,76,45,2,11}; int size = sizeof(arr)/sizeof(int); printf("請輸入要查詢的值:"); scanf("%d",&num); for(i=0;i<size;i++){ if(num==arr[i]){ break; } } if(i!=size) printf("要查詢的值%d在第%d個位置",num,i+1); else printf("未找到值%d",num); getch(); }

     

  2. 二分查找
    /*二分查找 
    二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。
    但是,折半查找要求線性表必須采用順序存儲結構,而且表中元素按關鍵字有序排列。
    */
    #include<stdio.h>
    void main(){
        int mid,low,high,num,arr[10]={3,6,9,10,23,65,76,87,88,213};
        int size = sizeof(arr)/sizeof(int);
        printf("請輸入要查詢的值:"); 
        scanf("%d",&num);
        low = 0;
        high = size;//初始low和high的值
        while(low<=high){
            mid = (low+high)/2;//取中值 
            if(arr[mid]==num) break;//找到,結束循環此時low<=high 
            else if(arr[mid] < num) low = mid+1;//如果目標值比當前中間值大,說明目標值在中間值的后面low移動到mid+1 
            else high = mid - 1;
        }
        if(low <= high)//找到,輸出 
            printf("要查詢的值%d在第%d個位置",num,mid+1);
        else //未找到 
            printf("未找到值%d",num);
        
        getch();
    } 

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM