Intro
- redis 号称是高性能的字典服务。redis 的底层常用的数据结构 (intset,skiplist 等大量使用二分查找技术)。 现在想看一下 二分查找到底有多块
code
#include <stdio.h>
int binarySearch(int arr[], int l, int r, int x)
{
if (r >= l) {
int mid = l + (r - l) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] > x)
return binarySearch(arr, l, mid - 1, x);
return binarySearch(arr, mid + 1, r, x);
}
return -1;
}
int main(int argc, char* agrv[]) {
// 生成测试所用的数组
int arr[1000], a[10]={1,2, 4,5 , 7,8, 9,10, 17, 21};
for (int i = 0; 100 > i; i++) {
for (int j =1; 11 > j; j++) {
if (i*10 +j > 999) {
break;
}
arr[i*10+j] = i*50 + arr[j-1];
}
}
// 二分查找
for (int i = 0; 200 >i ;i++) {
for (int j = 0; 1000> j; j++) {
binarySearch(arr, 0, 999, arr[j]);
}
}
return 0;
}
- 结论: 对 1000 个数字上执行 20 万次 二分查找只用了 0.022 秒