インターウェブのどこかから取得したコードを使用して、基数ソート機能をプログラムに実装しようとしました。プログラムの入力は、約 120 万の long int を含むテキスト ファイルです。テキスト ファイルからの整数を格納する maxSize = 1200000 の配列が既にあるため、radixSort 関数で作業配列を作成すると、セグ フォールトが発生します。これを回避する方法はありますか?
ドライバーコードは次のとおりです。
case 5:
//Sort using Radix Sort
startTime = clock();
radixSort(array, size);
writeArray(radixFile, array, size);
radixFile.close();
endTime = clock();
timeUsed = (endTime-startTime)/(double)CLOCKS_PER_SEC;
cout << "Time elapsed: " << timeUsed << " seconds" << endl;
break;
そしてここに関数があります
void radixSort(int *array,int size){
int i,b[maxSize],m=0,exp=1;
for(i=0;i<size;i++){
if(array[i]>m)
m=array[i];
}
while(m/exp>0)
{
int bucket[10]={0};
for(i=0;i<size;i++)
bucket[array[i]/exp%10]++;
for(i=1;i<10;i++)
bucket[i]+=bucket[i-1];
for(i=size-1;i>=0;i--)
b[--bucket[array[i]/exp%10]]=array[i];
for(i=0;i<size;i++)
array[i]=b[i];
exp*=10;
}
}
また、配列が作成される main の抜粋:
int main(){
int choice, size=0, x=0;
int *array = NULL;
array = new int[maxSize];
サイズが決定される場所:
void readArray(ifstream &inputFile, int arr[], int &size){
size = 0;
while (inputFile >> arr[size]){
size++;
}}