我无法让我的基数排序正确打印到文件
I can't get my radix sort to print to file correctly
我已经尝试了几个小时来实现这一点,但无论出于什么原因,我都无法正确打印数组。这是我的代码(下面的.txt文件)
//
// main.cpp
// cs498 -mp1
#include<iostream>
#include<stdlib.h>
#include <fstream>
#include<time.h>
int sortsize=1000;
int seed=1;
using namespace std;
void readfile(int *input, int size)
{
}
void writefile(int *input, int size)
{
ofstream myfile;
myfile.open ("example.txt");
myfile << "Radix Sortn";
for(int i=0; i<size; i++)
myfile << input[i] << endl;
myfile.close();
}
void radixsort(int *a, int arraySize)
{
int i, bucket[sortsize], maxVal = 0, digitPosition =1 ;
for(i = 0; i < arraySize; i++) {
if(a[i] > maxVal) maxVal = a[i];
}
int pass = 1;
while(maxVal/digitPosition > 0) {
// reset counter
int digitCount[10] = {0};
// count pos-th digits (keys)
for(i = 0; i < arraySize; i++)
digitCount[a[i]/digitPosition%10]++;
// accumulated count
for(i = 1; i < 10; i++)
digitCount[i] += digitCount[i-1];
// To keep the order, start from back side
for(i = arraySize - 1; i >= 0; i--)
bucket[--digitCount[a[i]/digitPosition%10]] = a[i];
for(i = 0; i < arraySize; i++)
a[i] = bucket[i];
cout << "pass #" << pass++ << ": ";
digitPosition *= 10;
}
}
void ccradixsort(int *array /* you will need more arguments */)
{
}
int main(int argc, char *argv[])
{
clock_t start, end;
int *sortarray;
int *input;
if(argc > 1)
sortsize = atoi(argv[1]);
sortarray = (int *) malloc(sortsize * sizeof(int));
input = (int *) malloc(sortsize * sizeof(int));
if(/*argc == 3*/ true)
{
seed = atoi(argv[2]);
for(int i = 0; i < sortsize; i++)
{
input[i] = rand();
}
}
else
{
readfile(input,sortsize);
}
for(int i = 0; i < sortsize; i++)
{
sortarray[i] = input[i];
}
start = clock();
radixsort(sortarray, sizeof(sortarray));
end = clock();
cout << "Sorted in " << (double)(end - start)/CLOCKS_PER_SEC << " seconds by radixsort()" << endl;
writefile(sortarray, sortsize);
/*
for(int i = 0; i < sortsize; i++)
{
sortarray[i] = input[i];
}
start = clock();
ccradixsort(sortarray);
end = clock();
cout << "Sorted in " << (double)(end - start)/CLOCKS_PER_SEC << " seconds by ccradixsort()" << endl;
//if(argc != 3)
// writefile(sortarray, sortsize);
*/
}
下面是它生成的文本文件的一部分:
>Radix Sort
>16807
>101027544
>282475249
>470211272
>984943658
>1144108930
>1457850878
>1622650073
>1458777923
>2007237709
>823564440
>1115438165
此处:
radixsort(sortarray, sizeof(sortarray));
因为sortarray
是int*
,所以sizeof(sortarray)
只有4或8(取决于您的目标)。
您可能应该像在其他地方一样使用sortsize
。
相关文章:
- 回溯C++不打印函数,因此文件
- 在gem5中打印文件中的所有cache_blocks
- 打印逐行存储的文本文件
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C/C++:打印(配置)头文件的内容
- 如何使代码打印文本文件中的第一行?
- 如何将文本文件读取到二维数组中并以 c++ 打印
- 按单词搜索文件,然后在C++中打印特定行数
- C++ 尝试优化每一帧将数据打印到二进制文件
- 如何访问头文件中类的组件并打印它们的地址?
- 如何在c ++中以一行(水平)打印两个文件的数据?如给定的.这两种形式来自两个不同的文本文件
- 使用 fstream 库并在屏幕上打印的文件有问题?
- 如何在几个空行后打印文件中的输出
- 二进制文件以及如何对其采取行动(打印文件)
- C 获取目录路径,解析文件夹名称和来自Parent Directory的打印文件内容
- 打印文件中的文本
- 如何打印文件的内容
- 打印文件的分段故障特征
- 打印文件夹中的文件
- 用c++打印文件的第n列