二分查找算法的一点改进
生活随笔
收集整理的這篇文章主要介紹了
二分查找算法的一点改进
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在計算機科學中,二分查找,是一種在有序數組中查找某一特定元素的搜索算法。這種搜索算法每一次比較都使搜索范圍減半。第一篇二分查找的論文發表于1946年,然而第一個沒有bug的二分查找算法卻是在1962年才出現,中間用了16年時間。
?
本文首先二分查找算法給出了官方標準寫法,然后給出另兩種改進。主要原因是,當low和high對應的數組元素比較大時,求平均值可能會造成溢出,所以針對此做了一些改進。下面是相關代碼實現。
//description: 給出二分查找法的幾種C語言實現方法,其中第一種是官方寫法,其它兩種是改進
//compile:gcc -g binary_search.c -o binary_search
//date: 2019-04-30#include <stdio.h>int binary_search_v1(int a[], int n, int k){int low, high, mid;low = 0;high = n-1;while(low <= high){mid = (low+high)/2;if(k<a[mid])high = mid-1;else if(k>a[mid])low = mid+1;elsereturn mid;}return -1;
}int binary_search_v2(int a[], int n, int k){int low, high, mid;low = 0;high = n-1;while(low <= high){//這里當low和heigh很大時,避免溢出mid = low+(high-low)/2;if(k<a[mid])high = mid-1;else if(k>a[mid])low = mid+1;elsereturn mid;}return -1;
}int binary_search_v3(int a[], int n, int k){int low, high, mid;low = 0;high = n-1;while(low <= high){//這里使用位運算效率更高mid = low+((high-low)>>1);if(k<a[mid])high = mid-1;else if(k>a[mid])low = mid+1;elsereturn mid;}return -1;
}int main() {int arr[] = {1,3,45,78,200,213,455};int size = sizeof(arr)/sizeof(int);int key = 213;int result1 = binary_search_v1(arr, size, key);int result2 = binary_search_v2(arr, size, key);int result3 = binary_search_v3(arr, size, key);printf("binary search result: %d, %d, %d\n", result1, result2, result3);return 0;
}
?
運行截圖如下:
?參考文獻
[1].https://www.toutiao.com/a6685490937977635341/
?
總結
以上是生活随笔為你收集整理的二分查找算法的一点改进的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在CentOS 6.3 64bit上安装
- 下一篇: 在Ubuntu 16.04.6 LTS上