您好,欢迎访问一九零五行业门户网

php排序1亿个QQ号码,该如何解决

php排序1亿个qq号码
吃饱喝足了,还发贴了。
拆开分成几千份进行排序再合并。
首先先创建一个1亿个qq号的txt。
$v)
{
$arr = range($v*10000+10000,10000*($v+1)+9999);
shuffle($arr);
fputs($fp,implode(\n, $arr).\n);
unset($arr);
}
echo microtime(true)-$st;
?>

稍等一两分钟1亿个随机qq创建完成了。
qq号码范围为>10000。文件大小大概有840mb。
下面就进行分类划分成几千份文件。
以qq号码长度为文件夹,qq号码前3位为文件名。
$v)
{
if($v!='')
{
$tag = $v[0]$v[1]$v[2];
$text_arr[strlen($v)][$tag][] = $v;
}
}
foreach ($text_arr as $k=>$v)
{
$n_dir = 'qq_no/'.$k;
if (!is_dir($n_dir)) mkdir($n_dir);
foreach ($v as $tag=>$val)
{
$n_tf = fopen($n_dir.'/'.$tag.'.txt', 'a+');
fputs($n_tf,implode(\n,$val).\n);
}
}
unset($text_arr);
++$i;
}
echo microtime(true)-$st;
?>

最后就要每个文件进行排序合并数据了。
$val)
{
if ($val != '.' && $val != '..')
$dirs[$val] = scandir($root.'/'.$val);
}
foreach ($dirs as $key=>$val)
{
foreach ($val as $v)
{
if ($v != '.' && $v != '..')
{
$file = $root. '/' . $key . '/'. $v;
$c = file_get_contents($file);
$arr = explode(\n, $c);
sort($arr);
fputs($qq_done, implode(\n,$arr));
unlink($file);
}
}
rmdir($root. '/' . $key);
}
rmdir($root);
echo microtime(true)-$st;
?>

总共大概花费了20多分钟。
虽然完成了,但方法很土鳖 0_0 ,坛里各位高手们改进改进啊。
------解决方案--------------------
来个c版本的
#include
#define bitsperword 32
#define shift 5
#define mask 0x1f
#define n 100000000
int a[1 + n/bitsperword];
void set(int i)

其它类似信息

推荐信息