方法一:老盆友快速排序法,代码如下:
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> int int_cmp(const void *a, const void *b) { const int *ia = (const int *)a; const int *ib = (const int *)b; return *ia - *ib; } void Unique_QuickSortMethod(int *arr, int elements) { //C语言自带的排序函数 qsort(arr, elements, sizeof(int), int_cmp); printf("%d\n", arr[0]); printf("%d\n", arr[elements - 1]); } int main() { int array[5] = { 1, 2, 5, 4, 2 }; int len = sizeof(array) / sizeof(array[0]); Unique_QuickSortMethod(array,len); getchar(); printf("\n"); }
方法二:取双元素法。维持两个变量min和max,min标记最小值,max标记最大值,初始值均设为数组首元素。从数组中第二个元素开始,每次比较相邻两个数,这样只用循环N/2次。较大者与max比较,较小者与min比较,找出最大值和最小值。比较次数为N/2*3=1.5N次。
代码如下:
#include "stdafx.h" #include <stdio.h> void GetMaxAndMin(int* arr, int len, int& Max, int& Min) { Max = arr[0]; Min = arr[0]; for (int i = 1; i < len - 1; i = i + 2) { if (arr[i] == arr[i + 1]) { if (arr[i]>Max) Max = arr[i]; if (arr[i] < Min) Min = arr[i]; } if (arr[i]>arr[i + 1]) { if (arr[i] > Max) Max = arr[i]; if (arr[i + 1] < Min) Min = arr[i + 1]; } if (arr[i] < arr[i + 1]) { if (arr[i + 1]>Max) Max = arr[i + 1]; if (arr[i] < Min) Min = arr[i]; } } } int main() { int max, min; int data[] = {10,11, 5, 2, 3, 9, 4, 1, 7 }; int num = sizeof(data) / sizeof(data[0]); GetMaxAndMin(data, num, max, min); printf("Max:%d\n", max); printf("Min:%d\n", min); getchar(); return 0; }
效果如图:
方法三:分治法。其实它娘的就是迭代,将数组划分成两半,分别找出两边的最小值、最大值,则最小值、最大值分别是两边最小值的较小者、两边最大值的较大者。
代码如下:
#include "stdafx.h" #include <stdio.h> void GetMaxMin(int a[], int low, int high, int& max, int& min) { int k, max1, min1, max2, min2; if (high - low == 1 || high - low == 0) { a[low] > a[high] ? (max = a[low], min = a[high]) : (max = a[high], min = a[low]); } else { k = (high + low) / 2; GetMaxMin(a, low, k, max1, min1); GetMaxMin(a, k + 1, high, max2, min2); max = max1 > max2 ? max1 : max2; min = min1 < min2 ? min1 : min2; } } int main() { int max, min; int data[] = { 8, 6, 5, 2, 3, 9, 4, 1, 7 }; int num = sizeof(data) / sizeof(data[0]); GetMaxMin(data, 0, num - 1, max, min); printf("Max:%d\n", max); printf("Min:%d\n", min); getchar(); return 0; }
效果如图:
如何寻找数组中的最小值和最大值,布布扣,bubuko.com
原文:http://www.cnblogs.com/cysolo/p/3597964.html