PHP-一个整型数组根据元素出现次数排序算法

发布于 2017-01-28 19:50:11 字数 75 浏览 1264 评论 6

一个包含N个元素的整型数组,求高效根据元素出现的次数进行重新排序算法。给出算法思路即可,给出实现代码更好,代码语言为PHP的最好!谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

浮生未歇 2017-09-07 01:29:26

使用map 或者哈希容器 之类的关联容器
他们构造的时候是自排序的 而且不会添加重复元素 只要在添加的时候 记录这些元素的添加失败次数 然后利用失败次数 然后在弄个允许重复关联容器 将值与键反向填入 然后按顺序输出

是因为出现次数可能相同 ...............
总觉得 做个小事 用容器 大材小用

不过简单 不用自己构思算法

晚风撩人 2017-09-02 21:52:22

最快就是快排,无非是先扫描一遍数据O(n),这个可忽略。然后快排O(nlgn)

泛泛之交 2017-08-15 06:26:57

//先求出数组每个元素出现的个数,形成数组

 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;
}
}

//再根据此数组,遍历获得最大值,求得索引,将原数组此索引位置上的元素放在新建数组的首位,再删除最大元素,后续如此即可

虐人心 2017-04-22 21:03:13

不考虑算法,写个利用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);

虐人心 2017-03-10 05:55:20

$input = {1,2,3,...};

$count = array();
foreach($input as $i)
{
if(isset($count[$i]))
{
$count[$i]++;
}
else
{
$count[$i] = 1;
}
}
asort($count);

这样行么

浮生未歇 2017-02-11 05:06:44

 #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;
}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文