基数排序需要用const值修复吗?

时间:2017-10-25 21:52:19

标签: c++

我写了基数排序的代码,我在网上看到了一些,但是当我在visual studio中写道时,它不接受countSort中的const大小。你能帮助我吗?非常感谢 它有[函数countort问题(输出[size])/ IDK如何解决它,你们能帮我个忙吗

#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];
}

1 个答案:

答案 0 :(得分:1)

你不能在编译时声明一个大小未知的数组,如下所示:

int output[size];

你需要像这样动态声明它:

int* output = new int[size];

请注意,您现在负责清理您在此处分配的内存,并在完成后将其删除:

delete[] output;

或者更好的是使用标准的c ++容器,如std :: vector