求最大值和最小值,相信再简单不过了,只要一个循环遍历,然后每次比较最大的和最小的值,然后遍历完后就得到了最大值和最小值了。
就是先排序,然后最大值和最小值就是头尾了。
这里用分治法来求最大值和最小值了。代码如下:
- #include <stdio.h>
- int aa[] = {1, 5, 0, -8, 4, 2};
- void get_max_min(int *s, int *nmax, int * nmin, int left, int right)
- {
- int max1, max2;
- int min1, min2;
- int mid;
- if(left == right) //最小的子问题就一个数,那么最大值和最小值都是其本身
- {
- *nmax = *nmin = s[left];
- return ;
- }
- else if(left == (right - 1)) //最小的子问题是两个数,那么比较得出其最大最小值。
- {
- max1 = s[left];
- max2 = s[right];
- *nmax = max1 > max2 ? max1 : max2;
- *nmin = max1 < max2 ? max1 : max2;
- return ;
- }
- else //否则,子问题还不够小,那么继续分治
- {
- mid = (left + right) / 2;
- get_max_min(s, &max1, &min1, left, mid);
- get_max_min(s, &max2, &min2, mid+1, right);
- *nmax = max1 > max2 ? max1 : max2; //子问题的解合并求最大值和最小值
- *nmin = min1 < min2 ? min1 : min2;
- return ;
- }
- }
- int main()
- {
- int max, min;
- get_max_min(aa, &max, &min, 0, 5);
- printf("max: %d\n", max);
- printf("min: %d\n", min);
- return 0;
- }