首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

依据数组中数字出现频率排序

2012-11-05 
根据数组中数字出现频率排序不知道是那个面试题目,题目大概意思就是数组中不多于10个一位的数字(0--9),根

根据数组中数字出现频率排序

不知道是那个面试题目,题目大概意思就是数组中不多于10个一位的数字(0--9),根据数字出现的频率从大到小排序,频率相同的按照数值大小排序,最后输出排序后的结果。

例如数组数据:arrayA[10]={1,1,2,3,4,4,6,7,7,7}; 根据频率排序后结果是:7 7 7 4 4 1 1 2 3 6; 再根据频率相同时按照数值大小排序,最后结果是: 7 7 7 4 4 1 1 6 3 2.

分析:

将数字的频率存进一个数组arrayB中,数组arrayB的下标是数组arrayA的数据,数组arrayB下标对应的值就是arrayA中对应数据的频率:

arrayB[ 10 ] = { 0 2 1 1 2 0 1 3 0 0 };

对应下标:       0 1 2 3 4 5 6 7 8 9

同时将数组arrayB数据复制一份到数组arrayC中,作为保存以便后面对比。

arrayC[ 10 ] ={0 2 1 1 2 0 1 3 0 0 };

使用插入法排序可以使相同频率的数字保持相对大小的顺序不变。对数组arrayB数据(arrayA数据频率)进行排序结果是:0 0 0 01 1 1 2 2 3.

最后从数组arrayB中依次从后往前(即频率从高到低输出)取数,arrayC也依次从后往前取数(保证频率相同时数值大的先打印),两数比较,若相等则打印:数组arrayC的下标是数组arrayA中的数值,值是出现的频率,打印频率那么多个数值即可。打印完一个将该数组数值标记,避免重复打印。

代码:




热点排行