2013-02-05 2 views
-1

몇 시간 동안이 작업을 시도했지만 어떤 이유로 든 내 배열을 올바르게 인쇄 할 수 없습니다. 여기에 내 코드 (아래 .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 Sort\n"; 

    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 
+0

이것은 C가 아닙니다. C++로 다시 태그 지정합니다. – unwind

+1

문제를 분류 및 인쇄로 구분하십시오. 결과물이 무엇을 기대 했습니까? 하드 코딩 된 값으로 테스트 해보십시오. –

+0

[최소 시험 경우] (http://sscce.org)를 작성하십시오. 아마도 문제가 정렬 루틴인지 또는 파일 작성 루틴인지 파악해야합니다. –

답변

1

:

radixsort(sortarray, sizeof(sortarray)); 

sortarray 때문에이 int*입니다, sizeof(sortarray)은 목표에 따라 4 개 또는 8 개입니다.

어쨌든 다른 곳과 마찬가지로 sortsize을 사용해야합니다.