我无法让我的基数排序正确打印到文件

I can't get my radix sort to print to file correctly

本文关键字:打印 文件 基数排序 我的      更新时间:2023-10-16

我已经尝试了几个小时来实现这一点,但无论出于什么原因,我都无法正确打印数组。这是我的代码(下面的.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));

因为sortarrayint*,所以sizeof(sortarray)只有4或8(取决于您的目标)。

您可能应该像在其他地方一样使用sortsize