创建时间: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