≡
  • 网络编程
  • 数据库
  • CMS技巧
  • 软件编程
  • PHP笔记
  • JavaScript
  • MySQL
位置:首页 > 网络编程 > PHP笔记

php 从N个数中找出最大的10个数示例

人气:704 时间:2018-09-21

这篇文章主要为大家详细介绍了php 从N个数中找出最大的10个数示例,具有一定的参考价值,可以用来参考一下。

对php从N个数中找出最大的10个数代码感兴趣的小伙伴,下面一起跟随四海网的小编两巴掌来看看吧!
php从N个数中找出最大的10个数代码
题目:
从N个数中选取最大的前10个, 有序输出.
N最大可能达到1000亿
每个数范围是0 - 2147483647

/**
 * php从N个数中找出最大的10个数代码
 *
 * @param 
 * @arrange 五一二笔记网: www.q1010.com
 **/
define('DEBUG',     FALSE);
define('INFO',     TRUE);
$stderr = fopen('php://stderr', 'w+');
$stdout = fopen('php://stdout', 'w+');
$stdin = fopen('php://stdin', 'r+');
class PQueue {
 public $data;
 public $next = NULL;
 public function __construct($data) {
  $this->data = $data;
 }
 public static function factory($data, $n) {
  $i  = -1;
  $head = NULL;
  $prev = NULL;
  while ( ++ $i < $n ) {
   $node = new PQueue($data);
   if ( is_null($head) ) 
	$head  = $node;
   if ( !is_null($prev) )
	$prev->next = $node;
   $prev = $node;
  }
  return $head;
 }
 public static function dump($node, $n) {
  global $stderr, $stdout;
  while ( !is_null($node) ) {
   fprintf($n ? $stderr : $stdout, "%d\n", $node->data);
   $node = $node->next;
  }
  if ( $n ) fprintf($n ? $stderr : $stdout, "\n");
 }
}
function generate_test_data($n) {
 global $stderr, $stdout;
 srand(time());
 for ( $i = 0; $i < $n; $i ++ ) {
  $r = rand(0, 2147483647);
  fprintf($stdout, "%d\n", $r);
  fprintf($stderr, "%s", pack('l', $r));
 }
}
function main($argc, $argv) {
 global $stderr, $stdout, $stdin;
 if ( $argc < 2 ) {
  printf("usage: \n\t1. 生成测试数据: %s <number> /* 标准错误以二进制方式输出测试数据, 标准输出以文本方式输出测试数据用于脚本校验 */\n\t2. 执行Top 10查找: %s <exec> /* 标准输出输出前10个最大数据(倒序), 开启INFO时在标准错误输出统计信息, 开启DEBUG时在标准错误输出调试信息\n", 
	 $argv[0], $argv[0]);
  exit(0);
 }
 if ( strcmp($argv[1], "exec") != 0 ) {
  /* 不考虑数字输入的容错了 */
  generate_test_data($argv[1]);
  exit(0);
 }
 $sbuff = NULL;
 $rbuff = PQueue::factory(-1, 10);
if ( DEBUG ) {
 PQueue::dump($rbuff, 1);
}
if ( INFO ) {
 $s_0 = 0;
 $s_1 = 0;
 $s_2 = 0;
 $begin = microtime(TRUE);
}
 while ( FALSE != ($sbuff = fread($stdin, 1024 * 1024 * 4)) ) {
  $sbuff = unpack('l*', $sbuff);
if ( INFO ) {
 $s_2 += count($sbuff);
}
  foreach ( $sbuff as $d ) {
if ( INFO ) {
 $s_0 ++;
}
if ( DEBUG )
 fprintf($stderr, "processing %d\n", $d);
   $tmp = &$rbuff;
   while ( $tmp != NULL && $d >= $tmp->data ) {
	$tmp = &$tmp->next;
if ( INFO ) {
 $s_0 += 2;
}
   }
if ( INFO ) {
 $s_0 ++;
}
   if ( $tmp === $rbuff )
	continue;
if ( DEBUG )
 fprintf($stderr, "tmp %d, rbuff %d\n", is_null($tmp) ? -1 : $tmp->data, $rbuff->data);
if ( INFO ) {
 $s_0 ++;
 $s_1 ++;
}
   $rbuff->data = $d;
   if ( $tmp != $rbuff->next ) {
	$t   = $rbuff;
	$rbuff  = $rbuff->next;
	$t->next = is_null($tmp) ? NULL : $tmp;
	$tmp  = $t;
if ( INFO ) {
 $s_1 += 4;
 $s_0 ++;
}
   }
  }
if ( DEBUG ) 
 PQueue::dump($rbuff, 1);
 }
if ( INFO ) {
 $end = microtime(TRUE);
}
 PQueue::dump($rbuff, 0);
if ( INFO ) {
 fprintf($stderr, "总计[%d]个输入\n总计比较[%d]次\n总计写内存[%d]次\n总计耗时[%0.6fs]\n", 
  $s_2, $s_0, $s_1, $end - $begin);
}
}
main($argc, $argv);
/***   来自四海网(www.q1010.com)   ***/

本文来自:http://www.q1010.com/173/806-0.html

注:关于php 从N个数中找出最大的10个数示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。

关键词:最大数

您可能感兴趣的文章

上一篇:php 调用万网接口实现域名查询示例
下一篇:php 静态变量和递归用法示例
热门文章
  • PHP 写入WRITE编码为UTF8的文件示例
  • PHP 中文字符串截取函数示例:支持gb2312,gbk,big
  • PHP 简单留言板的制作示例
  • 解决Fatal error: Call to undefined function mb_convert_encoding() in错误问题
  • PHP语言基础(标记、注释、变量、数组、常量、函数)示例
  • php 生成迅雷链接的简单示例
  • php 获取短网址的实现方法
  • PHP 通用分页类的简单示例
  • PHP 使用文件方式导入导出整个MYSQL数据库的实现方法
  • php 获取MYSQL错误的简单示例
  • 最新文章
    • 解决PHP使用redis实现统计缓存MySQL压力的问题
    • php 简单的上传进度条的简单示例
    • php 给html中引用的js和css路径打上版本号的实现方法
    • php 实现计算年龄精准到年月日的实例
    • php+ajax无刷新分页的简单示例
    • 解决php+ajax无刷新上传图片的问题
    • 解决PHP生成HTML静态页面的问题
    • 解决PHP使用uniqid函数生成唯一ID的问题
    • 解决PHP防刷票的一些问题
    • 微信access_token的获取开发的实现方法

四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。