服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C经典算法之二分查找法

C经典算法之二分查找法

2021-06-04 15:39CharlinGod C/C++

这篇文章主要介绍了C经典算法之二分查找法的相关资料,这里提供两种方法帮助大家实现这样的功能,需要的朋友可以参考下

C经典算法之二分查找法

1.根据key查找所在数组的位置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
/*
 key = 9;
 1 2 3 4 5 6 7 8
 arr 3, 4, 5, 7, 9 , 11, 21, 23
 low = 1  mid = (low + high)/2 = 4      high = 8;
 one   arr[mid] = 7 < 9;  so low = mid + 1 = 5; high = 8; mid = (low + high)/2 = 6
 two   arr[mid] = 11 > 9  so low = 5 ,   high = mid - 1 = 5 mid = 5;
 arr[mid] = 9 == key
 
 if(key = 10) low = mid + 1 > high
 
 */
int main(int argc, const char * argv[])
{
 int findByHalf(int arr[], int len, int key);
 
 int arr[] = {3, 4 , 5, 7, 9 , 11, 21, 23};
 int len = sizeof(arr)/sizeof(int);
 
 int index = findByHalf(arr, len, 88);
 
 printf("index = %d\n", index);
 return 0;
}
 
int findByHalf(int arr[], int len, int key){
 int low = 0;
 int high = len - 1;
 
 int mid ;
 
 
 while(low <= high){
  mid = (low + high) / 2;
  //右边查找
  if (key > arr[mid]) {
   low = mid + 1;
  //左边查找
  }else if (key > arr[mid]) {
   high = mid - 1;
  }else{
   return mid;
  }
 
 }
 return -1;
}

2.插入一个数,得到其所在数组的位置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <stdio.h>
/*
 key = 9;
 1 2 3 4 5 6 7 8
 arr 3, 4, 5, 7, 9 , 11, 21, 23
 low = 1  mid = (low + high)/2 = 4      high = 8;
 one   arr[mid] = 7 < 9;  so low = mid + 1 = 5; high = 8; mid = (low + high)/2 = 6
 two   arr[mid] = 11 > 9  so low = 5 ,   high = mid - 1 = 5 mid = 5;
 arr[mid] = 9 == key
 
 if(key = 10) low = mid + 1 > high
 
 */
int main(int argc, const char * argv[])
{
 int findByHalf(int arr[], int len, int key);
 
 int arr[] = {3, 4 , 5, 7, 9 , 11, 21, 23};
 int len = sizeof(arr)/sizeof(int);
 
 int index = findByHalf(arr, len, 88);
 
 printf("index = %d\n", index);
 return 0;
}
 
int insertByHalf(int arr[], int len, int key){
 int low = 0;
 int high = len - 1;
 
 int mid ;
 
 
 while(low <= high){
  mid = (low + high) / 2;
  //右边查找
  if (key > arr[mid]) {
   low = mid + 1;
  //左边查找
  }else if (key > arr[mid]) {
   high = mid - 1;
  }else{
   //如果arr[mid] == key
   //就把key插入到这个数的后面
   return mid + 1;
  }
 
 }
 //如果low > high 说明 key > arr[mid];
 //就把key插入到low对应的 这个数的位置
 return low;
}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/lovoo/article/details/51223355

延伸 · 阅读

精彩推荐