PHP-一个整型数组根据元素出现次数排序算法
一个包含N个元素的整型数组,求高效根据元素出现的次数进行重新排序算法。给出算法思路即可,给出实现代码更好,代码语言为PHP的最好!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
一个包含N个元素的整型数组,求高效根据元素出现的次数进行重新排序算法。给出算法思路即可,给出实现代码更好,代码语言为PHP的最好!谢谢!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
使用map 或者哈希容器 之类的关联容器
他们构造的时候是自排序的 而且不会添加重复元素 只要在添加的时候 记录这些元素的添加失败次数 然后利用失败次数 然后在弄个允许重复关联容器 将值与键反向填入 然后按顺序输出
是因为出现次数可能相同 ...............
总觉得 做个小事 用容器 大材小用
不过简单 不用自己构思算法
最快就是快排,无非是先扫描一遍数据O(n),这个可忽略。然后快排O(nlgn)
//先求出数组每个元素出现的个数,形成数组
for(int i=0;i<data.length;i++){
temp=data[i];
for(int j=0;j<data.length;j++){
if(data[j]==temp){
count[i]++;
}
}
if(count[i]>max){
max=count[i];
index=i;
}
}
//再根据此数组,遍历获得最大值,求得索引,将原数组此索引位置上的元素放在新建数组的首位,再删除最大元素,后续如此即可
不考虑算法,写个利用php函数来实现的:
$arr = array(1,2,4,6,2,3,1,1,3);
array_multisort($arr,array_pad(array_count_values($arr),count($arr),0));
print_r($arr);
$input = {1,2,3,...};
$count = array();
foreach($input as $i)
{
if(isset($count[$i]))
{
$count[$i]++;
}
else
{
$count[$i] = 1;
}
}
asort($count);
这样行么
#include <iostream>
#include <string>
#include <map>
#include <list>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
map<string,int> testMap;
map<int,string> trueMap;
list<string> testList;
testList.push_back("abc");
testList.push_back("ccc");
testList.push_back("bbb");
testList.push_back("ccc");
testList.push_back("abc");
testList.push_back("ccc");
testList.push_back("abc");
testList.push_back("abc");
testList.push_back("rrr");
testList.push_back("bbb");
//统计元素出现次数
list<string>::iterator iterList;
for(iterList= testList.begin(); iterList!=testList.end(); iterList++)
{
testMap[*iterList]++;
}
//按出现次数排序
map<string, int>::iterator iterMap;
for(iterMap=testMap.begin();iterMap!=testMap.end();iterMap++)
{
trueMap[iterMap->second] = iterMap->first;
}
//打印排序号的元素
map<int, string>::iterator iter;
for(iter=trueMap.begin();iter!=trueMap.end();iter++){
cout << iter->first << " " << iter->second << endl;
}
return 0;
}