日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递归应用:折半查找法

發(fā)布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递归应用:折半查找法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

折半查找法介紹

在計算機科學(xué)中,折半搜索(英語:half-interval search),也稱二分搜索(英語:binary search)、對數(shù)搜索(英語:logarithmic search),是一種在有序數(shù)組中查找某一特定元素的搜索算法
搜索過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較

迭代法實現(xiàn)代碼

//迭代實現(xiàn) 折半查找算法 int IndexEleArray1(int* arr,int len,int data) {//快速辨別元素不在數(shù)組中if (arr[0] > data || arr[len - 1] < data){return -1;}int min = 0;int max = len-1;while (min <= max){int mid = (max - min) / 2 + min;if (data > arr[mid]){min = mid+1;}else if (data < arr[mid]){max = mid-1;}else{return mid;}}//找不到返回-1return -1; }

遞歸法實現(xiàn)代碼

//遞歸實現(xiàn) 折半查找算法 int IndexEleArray2(int* arr,int min, int max, int data) {//快速辨別元素不在數(shù)組中if (data < arr[min] || data>arr[max]){return -1;}int mid = (max - min) / 2 + min;if (min <= max){if (data > arr[mid]){min = mid+1;return IndexEleArray2(arr, min, max, data);}else if (data < arr[mid]){max = mid-1;return IndexEleArray2(arr, min, max, data);}else{return mid;}}else{ //找不到返回-1return -1;} }

完整代碼

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <math.h> //迭代實現(xiàn) 折半查找算法 int IndexEleArray1(int* arr,int len,int data) {//快速辨別元素不在數(shù)組中if (arr[0] > data || arr[len - 1] < data){return -1;}int min = 0;int max = len-1;while (min <= max){int mid = (max - min) / 2 + min;if (data > arr[mid]){min = mid+1;}else if (data < arr[mid]){max = mid-1;}else{return mid;}}//找不到返回-1return -1; } //遞歸實現(xiàn) 折半查找算法 int IndexEleArray2(int* arr,int min, int max, int data) {//快速辨別元素不在數(shù)組中if (data < arr[min] || data>arr[max]){return -1;}int mid = (max - min) / 2 + min;if (min <= max){if (data > arr[mid]){min = mid+1;return IndexEleArray2(arr, min, max, data);}else if (data < arr[mid]){max = mid-1;return IndexEleArray2(arr, min, max, data);}else{return mid;}}else{ //找不到返回-1return -1;} }int main(int argc, char *argv[]) {printf("請輸入int數(shù)組元素個數(shù):");int count = 0;scanf("%d", &count);int* numArr = (int*)malloc(sizeof(int)*count);char numStr[10] = { 0 };printf("請輸入從小到大的數(shù)據(jù)元素:");for (size_t i = 0; i < count; i++){scanf("%s", &numStr);int num = atoi(numStr);numArr[i] = num;}while (1){printf("請輸入查找元素(0退出):");int data = 0;scanf("%d", &data);if (0 == data){break;}int index1 = IndexEleArray2(numArr, 0, count - 1, data);int index2 = IndexEleArray1(numArr,count, data);printf("迭代法查找元素位置:%d\n", index1);printf("遞歸法查找元素位置:%d\n", index2);}return 0; }

檢測結(jié)果



總結(jié)

以上是生活随笔為你收集整理的递归应用:折半查找法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。