mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 22:28:40 +08:00 
			
		
		
		
	Add Binary search recur in C code (#820)
* Update vector.h 增加功能列表: 获取向量的第 i 个元素 设置向量的第 i 个元素 向量扩容 向量缩容 向量插入元素 向量删除元素 向量交换元素 向量是否为空 向量是否已满 向量是否相等 对向量内部进行排序(升序/降序) 对向量某段数据排序(升序/降序) * Create hanota.c * 新增binary_search_recur.c * Update vector.h * Delete codes/c/chapter_divide_and_conquer directory * Update vector.h * Create binary_search_recur.c * Create CMakeLists.txt * Update vector.h * RollBack vector.h * Update CMakeLists.txt * Update binary_search_recur.c * Update binary_search_recur.c --------- Co-authored-by: Yudong Jin <krahets@163.com>
This commit is contained in:
		@ -1 +1,2 @@
 | 
				
			|||||||
 | 
					add_executable(binary_search_recur binary_search_recur.c)
 | 
				
			||||||
add_executable(hanota hanota.c)
 | 
					add_executable(hanota hanota.c)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										47
									
								
								codes/c/chapter_divide_and_conquer/binary_search_recur.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								codes/c/chapter_divide_and_conquer/binary_search_recur.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * File: binary_search_recur.c
 | 
				
			||||||
 | 
					 * Created Time: 2023-10-01
 | 
				
			||||||
 | 
					 * Author: Zuoxun (845242523@qq.com)
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../utils/common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 二分查找:问题 f(i, j) */
 | 
				
			||||||
 | 
					int dfs(int nums[], int target, int i, int j) {
 | 
				
			||||||
 | 
					    // 若区间为空,代表无目标元素,则返回 -1
 | 
				
			||||||
 | 
					    if (i > j) {
 | 
				
			||||||
 | 
					        return -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    // 计算中点索引 m
 | 
				
			||||||
 | 
					    int m = (i + j) / 2;
 | 
				
			||||||
 | 
					    if (nums[m] < target) {
 | 
				
			||||||
 | 
					        // 递归子问题 f(m+1, j)
 | 
				
			||||||
 | 
					        return dfs(nums, target, m + 1, j);
 | 
				
			||||||
 | 
					    } else if (nums[m] > target) {
 | 
				
			||||||
 | 
					        // 递归子问题 f(i, m-1)
 | 
				
			||||||
 | 
					        return dfs(nums, target, i, m - 1);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 找到目标元素,返回其索引
 | 
				
			||||||
 | 
					        return m;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* 二分查找 */
 | 
				
			||||||
 | 
					int binarySearch(int nums[], int target, int numsSize) {
 | 
				
			||||||
 | 
					    int n = numsSize;
 | 
				
			||||||
 | 
					    // 求解问题 f(0, n-1)
 | 
				
			||||||
 | 
					    return dfs(nums, target, 0, n - 1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Driver Code */
 | 
				
			||||||
 | 
					int main() {
 | 
				
			||||||
 | 
					    int target = 6;
 | 
				
			||||||
 | 
					    int nums[] = {1, 3, 6, 8, 12, 15, 23, 26, 31, 35};
 | 
				
			||||||
 | 
					    int numsSize = sizeof(nums) / sizeof(nums[0]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // 二分查找(双闭区间)
 | 
				
			||||||
 | 
					    int index = binarySearch(nums, target, numsSize);
 | 
				
			||||||
 | 
					    printf("目标元素 6 的索引 = %d\n", index);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user