Как исправить ошибку в коде с инкрементацией массива?
Код: сортировка чисел массива алгоритмом 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;
}