Radix Sort на Array of Strings не ведет себя правильно?

Я очень близок к тому, чтобы заставить эту программу работать, но я пытаюсь заставить эту программу алфавитно задавать ряд строк, используя сортировку по основанию, и у меня возникла проблема с выяснением, как

void msd(string* sortMe)
{
aux = new string[numElements];  //Set size of the array used to sort each character.
msd(sortMe, 0, numElements, 0);
}

void msd(string* sortMe, int l, int r, int d) //Here I use key-indexed     counting :http://algs4.cs.princeton.edu/lectures/51DemoKeyIndexedCounting.pdf
{
if(r < l || r == l) return; //if we get to 1 left, it is sorted
int count[256+1]= {0};  //256 because we are using ASCII. + 1 for key-indexed counting
for(int i =0; i < numElements; i++)
{
count[sortMe[i][d] + 1]++;   //For each letter found, you must put it in the ascii code + 1
}
for(int k = 1; k < 256; k++)    //Everything but null
{
count[k] += count[k-1];     //Get cumulates(everything before added together + what it is)
}
for(int i =0; i < numElements; i++)
{
aux[count[sortMe[i][d]]++] = sortMe[i]; //using your count array, you must move over elements from sortMe, to the aux array
}
for(int i = 0; i < numElements; i++)
{
sortMe[i] = aux[i];      //Then you must copy the elements from the aux array back to the main array.
}
for(int i = 0; i< numElements; i++)
{
cout<< aux[i]<< endl;
}
for(int i = 0; i < 255; i++)
{
msd(sortMe, l + count[i], l+ count[i+1], d+1); //You must then call recursively. The count array when finished, will give you what indexes(sub arrays to sort) you must sort between. Also, you are moving to the next character in the string(d)
}
}

Первая итерация прекрасно работает и сортирует все строки по первому символу. Однако вторая итерация выбрасывает все это в окно и сортирует их по второму символу. Как я могу это исправить, чтобы он работал правильно?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]