对1000000个数进行排序找出10个最大的数

本文通过快速排序和堆排序算法,解决从1000000个数字中找出最大的10个数的问题。代码实现包括数据生成、快速排序的非递归版本、堆排序,以及结果输出。实测表明,堆排序在找出最大元素时速度较快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建时间:2006年5月28
属性:原创
内容简介:快速排序,堆排序
关键字:快速排序,堆排序,排序


前序

从某网上看到google的面试题目,要求从1000000个数中选出10个最大的数,题目好像有些挑战性,想了半天,只知道用快速排序或堆排序或者归并排序比较好,于是开始动手写写。


一.随即生成数字(异常就懒得写了)

void CreateTheDataFile(long *&data, long &count)// data为引用一个指针,以便传回生成的数组
                                                                                           // count为data数组中数据的个数
{
 char num[9] = {'/0'};
 CFile file;
 if(!file.Open("num.dat",
  CFile::modeReadWrite |
  CFile::modeCreate |
  CFile::shareDenyNone |
  CFile::typeBinary))
  return;
 srand((long)time(NULL));
 for (int i = 0; i< 0xFFFFF; i++) //生成1000000个数字
 {
  int j = rand(); //随机生成数字
  int temp = j;
  int k = 0;   // 数字的位数
 
   if (j % 10 != 0)
  {
   for(;j % 10 != 0;) // 以下生成数字的位数
   {
    j /= 10;
    k++;
   }
  }
  else
  {
   for(;j > 0;) // 以下生成数字的位数
   {
    j /= 10;
    k++;
   }
  }
  j = temp;
  _itoa(j, num, 10);
  file.Write(num, k); // 只写k位数字
  file.Write("/n", 1);
 }
 /**/
 long *num2 = new long[0xFFFFFF]; //申请16M的空间,存储要比较的整数
 if (num2 == NULL)
  return;
 memset(num2, '/0', sizeof(num2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值