文章插圖

文章插圖
問題分析:
采用二分查找法查找特定關鍵字的元素 。要求用戶輸入數組長度,也就是有序表的數據長度,并輸入數組元素和查找的關鍵字 。程序輸出查找成功與否,以及成功時關鍵字在數組中的位置 。例如,在有序表 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;}運行結果:- 熊二傷心圖片 熊二慘死圖片
- 熊大變成僵尸 熊二變成僵尸了
- java定義二維數組并賦值代碼 Java給二維數組賦值
- 伊能靜生第二胎是多大年齡 和第二任丈夫秦昊的愛女
- 筆記本一拖二顯示器同屏 顯示器 一拖二
- 免費二級域名注冊申請 二級域名永久免費注冊
- 二維碼的定義與識別原理 二維碼識別原理介紹
- 二極管的選用原則是什么 二極管選用應該注意的參數
- 2002高考數學平均分 2002高考數學
- 柘城二高懷孕一百多人事件
