使用計數排序在C++中查詢中位數和眾數


假設我們有一個大小為n的陣列,我們需要使用計數排序技術來查詢中位數和眾數。當陣列元素在有限範圍內時,此技術非常有用。例如,如果元素為{1, 1, 1, 2, 7, 1},則眾數為1,中位數為1.5。讓我們看看什麼是中位數和眾數:

  • 中位數是在已排序的數字列表中的中間數字。
  • 眾數是在列表中出現次數最多的元素。

為了得到中位數和眾數,我們必須遵循以下步驟:

  • 假設輸入陣列的大小為n。
  • 在將計數陣列的先前計數累加到下一個索引之前,先獲取計數陣列。
  • 其中儲存的最大值的索引是給定資料的眾數。
  • 如果存在多個最大元素,則可以選擇其中一個。
  • 將值儲存到另一個名為**mode**的單獨變數中。
  • 繼續進行計數排序的常規處理。
  • 在已排序的陣列中,如果n是奇數,則中位數是已排序陣列中最中間的元素;如果n是偶數,則取中間兩個元素,然後求它們的平均值以獲得中位數。
  • 將值儲存到另一個名為median的單獨變數中。

示例

線上演示

#include <iostream>
using namespace std;
bool isRepresentedInDDigits(int num, int d, int base) {
   if (d==1 && num < base)
      return true;
   if (d > 1 && num >= base)
      return isRepresentedInDDigits(num/base, --d, base);
      return false;
}
bool checkNumber(int num, int d) {
   // Check for all bases one by one
   for (int base=2; base<=32; base++)
   if (isRepresentedInDDigits(num, d, base))
   return true;
   return false;
}
int main() {
   int num = 8;
   int dig = 2;
   if(checkNumber(num, dig))
      cout << "Can be represented";
   else
      cout << "Can not be represented";
}

輸出

Can be represented

更新於:2019年10月21日

瀏覽量:306

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告