#include <stdio.h> #define LENGTH 5 /************************************************************************/ /* 求n个数中最大值和最小值 两两对比,形成两组数一个较大组和一个教小组(复杂度为n/2) 在较大组中取出一个数和改组其他数比较((n-1)/2) 在较小组中取出一个数和改组其他数比较((n-1)/2) 如果为奇数的话,注意再比较一次 复杂度大概为1.5n */ /************************************************************************/ void main() { int a[LENGTH] = {3,4,1,2,9}; int length = LENGTH; if (length < 1) { printf("请输入"); return; } if (length == 1) { printf("max: %d, min: %d", a[length - 1], a[length - 1]); return ; } int tmp; for (int i = 0; i < length; i += 2) { if (i + 1 < length && a[i] < a[i+1]) { tmp = a[i]; a[i] = a[i+1]; a[i+1] = tmp; } } int max = a[0]; int min = a[1]; for (int i = 2; i < length; i += 2) { if (a[i] > max) { max = a[i]; } } for (int i = 3; i < length; i += 2) { if (a[i] < min) { min = a[i]; } } //如果为奇数个数 if (length % 2 == 1 && min > a[length - 1]) { min = a[length - 1]; } printf("max: %d, min: %d", max, min); getchar(); }