从哪里开始使用伪冒泡排序或平均前 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 个值的主要内容,如果未能解决你的问题,请参考以下文章

如何实现仅执行“K”次的冒泡排序

冒泡排序

冒泡排序

冒泡排序

从0开始学算法--排序(1.2冒泡排序)

Java 冒泡排序