Как исправить ошибку в коде с инкрементацией массива?

Код: сортировка чисел массива алгоритмом MSD. Проблема в строчках, где count++. Я понимаю, что инкрементацию массива делать так нельзя, но что нужно поменять, чтобы этот код "ожил"?

#include <iostream>
#include <math.h>
#include <unordered_map>
 
using namespace std;
 
// Служебная функция для печати массива
void print(int* arr, int n)
{
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}
 
// Служебная функция для получения цифры
// с индексом d в целочисленном
int digit_at(int x, int d)
{
    return (int)(x / pow(10, d - 1)) % 10;
}
 
// Основная функция для сортировки массива с помощью
// Рекурсивная сортировка по основанию MSD
void MSD_sort(int* arr, int lo, int hi, int d)
{
 
   // условие прерывания рекурсии
    if (hi <= lo) {
        return;
    }
 
    int count[10 + 2] = { 0 };
 
    // temp создан для простой замены строк в arr[]
    unordered_map<int, int> temp;
 
    // Хранить события наиболее значимого характера
    // из каждого целого числа в count[]
    for (int i = lo; i <= hi; i++) {
        int c = digit_at(arr[i], d);
        count++;
    }
 
  // Изменил count[] так, чтобы count[] теперь содержал фактические
    // положение этой цифры в temp[]
    for (int r = 0; r < 10 + 1; r++)
        count[r + 1] += count[r];
 
 
    for (int i = lo; i <= hi; i++) {
        int c = digit_at(arr[i], d);
        temp[count++] = arr[i];
    }
 
   // // Скопировал все целые числа temp в arr[], так что теперь это []
    // содержит частично отсортированные целые числа
    for (int i = lo; i <= hi; i++)
        arr[i] = temp[i - lo];
 
    // Рекурсивно MSD_sort() для каждого частично отсортированного
    // целые числа, заданные для сортировки по следующей цифре
    for (int r = 0; r < 10; r++)
        MSD_sort(arr, lo + count[r], lo + count[r + 1] - 1,
                 d - 1);
}
 
// функция для нахождения наибольшего целого числа
int getMax(int arr[], int n)
{
    int mx = arr[0];
    for (int i = 1; i < n; i++)
        if (arr[i] > mx)
            mx = arr[i];
    return mx;
}
 
// Основная функция для вызова MSD_sort
void radixsort(int* arr, int n)
{
   // Нахождение максимального числа, чтобы узнать количество цифр
    int m = getMax(arr, n);
 
    // получить длину самого большого целого числа
    int d = floor(log10(abs(m))) + 1;
 
    // вызов функции
    MSD_sort(arr, 0, n - 1, d);
}
int main()
{
    // Входной массив
    int arr[] = { 9330, 9950, 718, 8977, 6790,
                  95,   9807, 741, 8586, 5710 };
 
    // Размер массива
    int n = sizeof(arr) / sizeof(arr[0]);
 
    printf("Unsorted array : ");
 
    // Печать несортированного массива
    print(arr, n);
 
    // Вызов функции
    radixsort(arr, n);
 
    printf("Sorted array : ");
 
    // Печать отсортированного массива
    print(arr, n);
 
    return 0;
}

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