C语言二分查找
程序员文章站
2022-04-14 15:11:16
#include /* 二分查找条件: 1、有序序列 2、数据在数组中 */ int baseBinarySearch(int a[],int h,int k) { int low=0; int high=h; int mid =0; int NoFound = -1; while (low a[m... ......
#include <stdio.h> /* 二分查找条件: 1、有序序列 2、数据在数组中 */ int baseBinarySearch(int a[],int h,int k) { int low=0; int high=h; int mid =0; int NoFound = -1; while (low <= high) { mid = low + (high-low) /2 ; if ( k < a[mid] ) { high = mid - 1; } else if ( k > a[mid] ) { low = mid + 1; } else { return mid; } } return NoFound; } //查找第一个相等的元素 int FirstElementBinSearch(int a[],int h,int k) { int low=0; int high=h; int mid =0; int NoFound = -1; while (low <= high) { mid = low + (high-low) /2 ; if ( k <= a[mid] ) { high = mid - 1; } else { low = mid + 1; } } return low <= h ? low : NoFound; } //查找最后一个相等的元素low int LastElementBinSearch(int a[],int h,int k) { int low=0; int high=h; int mid =0; int NoFound = -1; while (low <= high) { mid = low + (high-low) /2 ; if ( k >= a[mid] ) { low = mid + 1 ; } else { high = mid -1 ; } } printf("%d %d %d\n",low,high,a[low-1]); if (low - 1 >= 0 && a[low - 1] ==k) { return low-1; } return NoFound; }
下一篇: MyBatis拦截器原理探究