使用計數排序在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
廣告