有一个很基础的算法在做嵌入式开发中经常会使用到,那就是找最值,最常见的是以下两个宏:
#define max(a,b) ((a) > (b) ? (a) : (b)) #define min(a,b) ((a) < (b) ? (a) : (b))
max和min宏分别比较两个值谁大谁小,然后予以返回,很简单。
但如果是比较多个数据的数值,我们就需要对数组里的元素进行比较了,来看看程序实现:
find_buffer_max_min.c #include <stdio.h> #include <unistd.h> #include <stdlib.h> #define NR(x) (sizeof(x)/sizeof(x[0])) #define u32 unsigned int #define u8 unsigned char //找数组的最小值 static u32 find_buffer_min(u32 buffer_value_min,u32 size,u32 *buffer) { u8 count = 0 ; //先设置一个比较的范围值 u32 min = buffer_value_min ; //遍历数组size个字节 for(count = 0 ; count < size ; count++) { //比较当前数组的索引值是否小于当前设定的最小值 //如果是的话,将该值赋值给min,依次通过for循环遍历,直到找到最小值 if(buffer[count] < min) min = buffer[count]; } //返回最小值 return min ; } //找数组的最大值 static u32 find_buffer_max(u32 buffer_value_max,u32 size,u32 *buffer) { u8 count = 0 ; u32 max = buffer_value_max ; //遍历数组size个字节 for(count = 0 ; count < size ; count++) { //比较当前数组所在的索引值是否大于当前设定的最大值 //如果是的话,将该值赋值给max,依次通过for循环遍历,直到找到最大值 if(buffer[count] > max) max = buffer[count]; } //返回最大值 return max ; } int main(void) { int i = 0 ; int buffer[10] = {11111,45465,5454,11211,45778,21144,854,12347,12347,8898}; int min = find_buffer_min(32767,NR(buffer),buffer); int max = find_buffer_max(32767,NR(buffer),buffer); printf("min:%d max:%d\n",min,max); return 0 ; }
运行结果: