2017-10-25 10 views
0

iamは基数ソートのコードを書いていましたが、オンラインで見ましたが、ビジュアルスタジオで書きましたが、countSortのconstサイズを受け入れませんでした。あなたはこれで私を助けてくれますか? が、それは君たちが私にあなたがサイズで配列を宣言することはできません基数ソートはconst値で修正する必要がありますか?

#include <iostream> 
#pragma comment(linker, "/STACK:8000000") 
#include <ctime> 
#include <iomanip> 
#include <stdio.h> 
using namespace std; 
void radixSort (int [], int); 
int maxNumber (int[], int); 
void countSort(int [], int , int); 

int main(){ 
    const int size = 8; 
    int arr [] = {110, 5, 10,3 ,22, 100, 1, 23}; 
    //int size = sizeof(arr)/sizeof(arr[0]); 
    for (int i = 0; i <size; i++){ 
     cout << setw(7) <<arr[i] ; 
    } 
for (int i = 0; i < size; i++){ 
     cout << setw(7) <<arr[i] ; 
    } 
    cout << endl; 

    radixSort (arr, size); 

    system("pause"); 
    return 0; 
} 


void radixSort (int arr[], int size){ 
    int exp, m; 

    m = maxNumber(arr, size); 

    for (exp = 1; m/exp > 0; exp *= 10) 
     countSort(arr, size, exp); 
} 

int maxNumber (int arr[], int size){ 
    int max = arr[0]; 
    for (int i = 1; i < size; i++) 
     if (arr[i] > max) 
      max = arr[i]; 
    return max; 
} 

void countSort(int arr[], int size , int exp) 
{ 


    **int output[size];** 
    int i, count[10] = {0}; 


    for (i = 0; i < size; i++) 
     count[(arr[i]/exp) % 10]++; 


    for (i = 1; i < 10; i++) 
     count[i] += count[i-1]; 

    for (i = size - 1; i >= 0; i--) 
    { 
     output[count[(arr[i]/exp) % 10] - 1] = arr[i]; 
     count[(arr[i]/exp) % 10]--; 
    } 

    for (i = 0; i < size; i++) 
     arr[i] = output[i]; 
} 
+0

'int型出力[サイズ]のような標準C++のコンテナを使用します。あなたはここに割り当てられているし、あなたがそれを終了したら、それを削除する必要があります電子メモリ(可変長配列は禁じられています) – BLUEPIXY

+0

代替: 'std :: vector 出力(サイズ);' – user4581301

+0

これで動作します。 –

答えて

1

手を関数countsort(出力[サイズ])/ は、それを修正する方法をIDKで[問題を与えることができましたどうもありがとうこのようなコンパイル時に不明:

int output[size]; 

あなたはこのように動的に宣言する必要があります:あなたが今目をクリーンアップするための責任がある

int* output = new int[size]; 

注意を;

delete[] output; 

いっそのstd ::ベクトル

+0

ありがとうございます。もう1つ質問してください。 –

+0

バイナリマージソートとナチュラルマージソートの違いはわかりません。 –

+0

あなたはそれが私のために働く方法を説明することができます –

関連する問題