从哪里开始使用伪冒泡排序或平均前 4 个值
Posted
技术标签:
【中文标题】从哪里开始使用伪冒泡排序或平均前 4 个值【英文标题】:Where to start with pseudo bubble sort or average top 4 values 【发布时间】:2015-07-08 03:59:44 【问题描述】:我正在使用 Arduino Leonardo 和 GPSTiny++ 库来解析来自我的 GPS 接收器的 NMEA 字符串。在这段代码中,我对锁定的卫星(用于导航)的所有卫星 SNR 数进行平均。 avg 值提供了一些关于整体性能的一般信息,但我也在寻找 avg Top 4 值。
我相信我需要做某种排序算法。增加前 4 名并平均这些值。
这是我的输出窗口的 sn-p: 12/13 0.92 信噪比=17 10 27 27 30 29 25 27 33 0 0 0 31 25.60 0.00
倒数第二个数字是平均值。
我该如何开始?
int totalSNR = 0;
float avgSNR = 0;
int count = 0;
Serial.print(F(" SNR="));
for (int i = 0; i < MAX_SATELLITES; ++i)
if (sats[i].active)
if (sats[i].snr > 0)
count++;
totalSNR = totalSNR + sats[i].snr;
Serial.print(sats[i].snr);
Serial.print(F(" "));
avgSNR = float(totalSNR) / float(count);
Serial.print(avgSNR);
【问题讨论】:
所以你没有 sort() 库函数?哪种编程语言? 我正在使用 Arduino IDE。我将检查 sort() 函数。谢谢。 【参考方案1】:你会做这样的事情: 使用您的值创建一个数组,然后对该数组进行排序。 这将为您提供一个值数组,其中元素编号为 1 中的最大值和最后一个元素中的最小值。 前 4 名将是您的前 4 名最高值。然后,您可以将它们加在一起并除以 4,得到前 4 名最高值的平均值。 确保数组大小与“MAX_SATELLITES”相同。
for (int i = 0; i <= MAX_SATELLITES; ++i)
for (int j = 0; j < MAX_SATELLITES; ++j)
if (VALUES_ARRAY[j] < VALUES_ARRAY[j+1])
VALUE_HIGH = VALUES_ARRAY[j+1];
VALUE_LOW = VALUES_ARRAY[j];
else
VALUE_HIGH = VALUES_ARRAY[j];
VALUE_LOW = VALUES_ARRAY[j+1];
VALUES_ARRAY[j] = VALUE_HIGH;
VALUES_ARRAY[j+1] = VALUE_LOW;
【讨论】:
以上是关于从哪里开始使用伪冒泡排序或平均前 4 个值的主要内容,如果未能解决你的问题,请参考以下文章