c語言調用函數格式 ,二分法c語言程序代碼

問題分析:

採用二分查找法查找特定關鍵字的元素。要求用戶輸入數組長度,也就是有序表的數據長度,並輸入數組元素和查找的關鍵字。程序輸出查找成功與否,以及成功時關鍵字在數組中的位置。例如,在有序表 10、13、17、 28、39、58、69、88、98、152 中查找關鍵字為88的元素。

算法描述:

(1)首先,從數組的中間元素開始查找,如果該元素正好是目標元素,則搜索過程結束,否則執行下一步。
(2)如果目標元素大於/小於中間元素,則在數組大於/小於中間元素的那一半區域去查找,然後重複步驟(1)的操作。
(3)如果某一步數組為空,則表示找不到目標元素

代碼實現:

    #include <stdio.h>
    
void bubblingSort(int arr[], int n) {
    int i, j, temp;
    // 每次將一個元素送到末尾,n個元素,執行n次
    for (i = 0; i < n; ++i) {
        // 之前的循環已經將i個元素送到末尾,不需要再次比較,故減去,因為跟後一個元素比較,為了避免溢出,故減一
        for (j = 0; j < n - i - 1; ++j) {
            // 如果當前的元素比後一個元素小,就交換
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}
	
    int binarySearch(int key,int a[],int n) //自定義函數binary_search()
    {
        int low,high,mid,count=0,count1=0;
        low=0;
        high=n-1;
        while(low<=high)    //査找範圍不為0時執行循環體語句
        {
            count++;    //count記錄査找次數
            mid=(low+high)/2;    //求中間位置
            if(key<a[mid])    //key小於中間值時
                high=mid-1;    //確定左子表範圍
            else if(key>a[mid])    //key 大於中間值時
                low=mid+1;    //確定右子表範圍
            else if(key==a[mid])    //當key等於中間值時,證明查找成功
            {
                printf("查找成功!n 查找 %d 次!a[%d]=%d",count,mid,key);    //輸出査找次數及所査找元素在數組中的位置
                count1++;    //count1記錄查找成功次數
                break;
            }
        }
        if(count1==0)    //判斷是否查找失敗
            printf("查找失敗!");    //査找失敗
        return 0;
    }
    int main()
    {
        int i,key,arr[100],n;
        printf("請輸入數組的長度:n");
        scanf("%d",&n);    //輸入數組元素個數
        
        printf("請輸入數組元素:n");
        for(i=0;i<n;i++)
            scanf("%d",&arr[i]);    //輸入有序數列到數組a中
            
        printf("排序前:"); 
        for (i = 0; i < n; ++i) {
				        printf("%d ", arr[i]);
				    } 
				    
        bubblingSort(arr,n);//冒泡排序
        printf("排序後:");
		for (i = 0; i < n; ++i) {
		        printf("%d ", arr[i]);
		    } 
		    
        printf("請輸入你想查找的元素:n");
        scanf("%d",&key);    //輸入要查找的關鍵字
        binarySearch(key,arr,n);    //調用二分法查找函數 
        printf("n");
        return 0;
    }

運行結果:

C語言二分查找算法

我從事互聯網行業幾十年,主要的研究方向是大數據,人工智能,物聯網領域,感興趣的朋友可以關注我,也可以在評論區留言,大家一起交流和溝通。

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/234323.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-11 20:12
下一篇 2024-12-11 20:12

相關推薦

發表回復

登錄後才能評論