Я написал код, который предназначен для сортировки массива строк с использованием сортировки radix, начиная с младшей значащей цифры. Эта функция предполагает, что все строки имеют одинаковую длину, и каждый символ имеет нижний регистр.C++: Сортировка строк с использованием сортировки сортировки LSD radix
Я встречаюсь с авариями, когда попадаю в цикл, в котором я присваиваю значения временному массиву. Вы можете увидеть мои функции здесь:
#ifndef RADIX_H
#define RADIX_H
#include <string>
#include <iostream>
using namespace std;
void lsd_string_radix(string array[], int array_size, int max_chars)
{
string *temp = new string[array_size];
for(int i = max_chars - 1; i >= 0; i--)
{
int count[26] = {0};
for(int j = 0; j < array_size; j++)
{
count[static_cast<int>(array[j][i]) - 97]++;
}
for(int j = 1; j <= 26; j++)
{
count[j] += count[j - 1];
}
for(int j = 0; j < array_size; j++)
{
temp[count[static_cast<int>(array[j][i])]++] = array[j]; // crashes here
}
for(int j = 0; j < array_size; j++)
{
array[j] = temp[j];
}
}
}
#endif
Я предполагаю, что у меня есть недостаток в логике, но я не могу понять это для жизни меня.
Ты просто отсутствует '-97' в строке, где он сбой? –
'string array []' переданный по значению, вероятно, будет намного лучше, чем 'const & std :: vector' reference. Сортировка с агрессивным использованием 'static_cast', вероятно, также контрпродуктивна. Почему бы не преобразовать и не сортировать? Стандартные контейнеры делают это довольно легко реализовать. –
tadman