Почему поразрядная сортировка строк msd работает неправильно

Не могу найти ошибку в коде сортировки msd, она работает неправильно, при вводе строк std::string arr[arrSize] = {"ab", "a", "aaa", "aa"};результат должен быть a aa aaa ab. А у меня получается a aaa aa ab. Помогите найти ошибку.

void MSDSort(std::string *arr, size_t start, size_t end, size_t d = 0) {
    size_t arrSize = end - start;
    const size_t R = 256;
    int count[R + 1]{0};
    for (int i = 0; i < arrSize; i++)
            count[arr[i][d]+1]++;
    for (int r = 0; r < R; r++)
            count[r+1]+=count[r];
    std::string *aux = new std::string [arrSize];
    for (int i = 0; i < arrSize; i++)
        aux[count[arr[i][d]]++] = arr[i];
    for (int i = 0; i < arrSize; i++)
            arr[i] = aux[i];
    delete [] aux;
    d++;
    for (size_t i = 1; i < R; i++) {
       if (!(count[i] == 0 && count[i+1] == 0))
            MSDSort(arr, start + count[i], start + count[i + 1], d);
    }
}

int main(){
    const size_t arrSize = 4;
    std::string arr[arrSize] = {"ab", "a", "aaa", "aa"};
    MSDSort(arr, 0, arrSize);
    for (size_t i = 0; i < arrSize; i++)
        std::cout << arr[i] << std::endl;
    return 0
}

Ответы (0 шт):