С чего начать с псевдопузырьковой сортировки или усреднения первых 4 значений

Я использую Arduino Leonardo и библиотеку GPSTiny++ для разбора строк NMEA с моего GPS-приемника. В этом фрагменте кода я усредняю ​​значения SNR для всех спутников, которые заблокированы (используются для навигации). Значение avg предоставляет некоторую общую информацию об общей производительности, но я также действительно ищу значения 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);

person Samee87    schedule 08.07.2015    source источник
comment
Значит, у вас нет функции библиотеки sort()? какой язык программирования?   -  person AlexWien    schedule 08.07.2015
comment
Я использую Arduino IDE. Я проверю функцию sort(). Спасибо.   -  person Samee87    schedule 09.07.2015


Ответы (1)


Вы можете сделать что-то вроде этого:
Создайте массив со своими значениями, затем отсортируйте этот массив. Это даст вам массив значений, упорядоченных с наибольшим значением в элементе номер 1 и наименьшим значением в последнем элементе.
Первые 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;  
    }  
}  
person Roan    schedule 12.08.2015