2016-04-23 95 views
1

我正在尋找一種按頻率對數組元素進行排序的算法(至少到最頻繁)。例如:基於每個元素的頻率對數組元素進行排序

array[10] = {1, 1, 1, 5, 2, 3, 3, 3, 3, 4}; //initial array 

array[10] = {5, 4, 2, 1, 1, 1, 3, 3, 3, 3}; //post-sorting array 

具有相似的頻率(5,4和2在上面的例子)中的元素的順序,因爲它們是與其他人相同的頻率的分組並不重要,只要。

我不知道如何去做這個,我看到THIS,但它是在matlab(我不知道),而不是C,它很依賴庫函數,我試圖不去做。

回答

1

typedef一個包含值和頻率的結構體。將其中的10個數組作爲頻率表,並將表計數初始設置爲0。

迭代源數組並組裝頻率表,如果發現沒有表條目的值,則計數該頻率表。

使用qsort按升序對頻率表進行排序。

迭代排序的頻率表,建立並輸出數組。如果你願意,你可以使用輸入數組作爲輸出數組。

如果您不想使用qsort lib函數,請替換您自己的排序。

2

您可以創建一個包含元素和元素頻率的結構,並且您還可以通過增加freq字段將元素插入到數組中時避免重複。

例如:

typedef struct elem{ 
    int value; 
    int freq; 
} element; 

然後排序陣列element[N]頻率明智的,也許與像qsort

的算法
相關問題