说明:
集合:可以是静态数组也可以是动态链表,按需调整; 前置条件:默认输入的数组长度大于等于5,其他情况按需设计处置方法;
基本逻辑说明:
本文使用静态数组的方式计算;
基本逻辑为按顺序读取输入集合的数值,并填入一个长度为5(或者指定最大长度为5,而数组实际长度大于5都行)的整型数组;
如果读取的数值为大的数,则填入静态数组的高位,小的数则填入静态数组的低位;
静态数组作为一个类队列的结构存在,如果填入数值超过5则会舍弃,按从小到大排列,舍弃高位的大数;
由于队列运算载体为静态数组,每次填入新数都可能产生大量重赋值操作,所以实际运算的时间复杂度偏高,因此本文只提供思路,不做性能优化;
代码:
所需函数和定义:
#include <malloc.h>
#define MAX_SIZE 5
void addNum(int v); int getMin5(int* inArr, int len);
函数实现:
#include "MyList.h"
int gl_Queue[5] = { 0 }; int maxNum = 0;
void addNum(int v) {
int index = 0;
int i = 0;
if (maxNum == 0) {
gl_Queue[0] = v;
maxNum++;
return;
}
for (index = 0; index < MAX_SIZE; index++) {
if (gl_Queue[index] >= v) {
for (i = MAX_SIZE - 1; i >= index; i--) {
gl_Queue[i] = gl_Queue[i - 1];
}
gl_Queue[index] = v;
maxNum++;
return;
}
}
if (maxNum < 5) {
for (i = 0;;i++) {
if (i == maxNum) {
gl_Queue[i] = v;
maxNum++;
return;
}
}
}
else {
return;
}
}
int getMin5(int* inArr, int len) {
int i = 0;
for (i = 0; i < len; i++) {
addNum(inArr[i]);
}
return gl_Queue[4];
}