从伪冒泡排序或平均前4个值开始的位置

时间:2015-07-08 03:59:44

标签: sorting parsing gps nmea

我使用Arduino Leonardo和GPSTiny ++库来解析我的GPS接收器中的NMEA字符串。在这段代码中,我对锁定的卫星的所有卫星SNR数进行平均(用于导航)。平均值提供了一些关于整体性能的一般信息,但我也非常关注avg Top 4值。

我相信我需要做一些排序算法。通过前4名增加并平均这些值。

这是我的输出窗口的片段: 12/13 0.92 SNR = 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);

1 个答案:

答案 0 :(得分:0)

你会做这样的事情:
使用您的值创建一个数组,然后对该数组进行排序。 这将为您提供一系列值,这些值以元素编号1中的最高值和最后一个元素中的最低值排列 前4名将是您的前4名最高值。然后你可以将它们加在一起并除以4得到最高4的平均值 确保数组大小与&#34; MAX_SATELLITES&#34;相同。

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;  
    }  
}