1. 程式人生 > >二分查詢法的基本思想與實現程式碼

二分查詢法的基本思想與實現程式碼

二分查詢法思想:

二分查詢法又稱夾逼法,二分查詢法使用的基本條件是一個有序的陣列,通過從陣列頭部和尾部折半,判斷要查詢的數和mid位置數值的大小,來判斷要查詢的數實在那一半,之後繼續折半查詢,直至找到這個數或者最後小端大於大段則結束查詢

二分查詢法程式碼:

#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXLEN 100

//建立陣列
void createArr(int arr[],int len)
{
    int i=0;
    srand((unsigned int)time(NULL));
    for(i=0;i<len;i++)
    {
        arr[i]=rand()%MAXLEN;
    }
    return ;
}

//列印陣列
void printArr(int arr[], int len)
{
    int i=0;
    for(i=0;i<len;i++)
    {
        printf("%d=%d\n",i+1,arr[i]);
    }
    return ;
}

//選擇排序程式碼
void select_sort(int arr[],int len)
{
    int i=0,j=0;
    for(i=0;i<len;i++)//控制每次從陣列哪個位置開始執行迴圈,第一次從第一個元素開始,之後每次向後移動一個元素
    {
        for(j=i+1;j<len;j++)//負責未排序部分第一個元素與後面元素之間的比較,不滿足排序規則時交換兩個元素
        {
           if(arr[j]<arr[i])
           {
               int tem=arr[i];
               arr[i]=arr[j];
               arr[j]=tem;
           }
        }
    }
    return ;
}

void  binary_chop(int arr[],int len,int num)
{
    int min=0;
    int max=len-1;
    while(min<=max)
    {
        int mid=(max-min)/2+min;
        if(arr[mid]<num)
            min=mid+1;
        else if(arr[mid]>num)
            max=mid-1;
        else
        {
            cout<<"找到"<<num<<endl;
                return ;
        }
    }
    cout<<"陣列中沒有"<<num<<endl;
    return ;
}

int main(void)
{
    int number;

    printf("Hello World!\n");

    int arr[MAXLEN]={0};

    createArr(arr,MAXLEN);

    select_sort(arr,MAXLEN);

    printArr(arr,MAXLEN);

    cout<<"請輸入要查詢的數:"<<endl;

    cin>>number;

    binary_chop(arr,MAXLEN,number);

    return 0;
}