#include <iostream>
#include "locale.h"
#include <stdio.h>
using namespace std;
int n, digit_amt = 0; //digit amount - количество разрядов
int max_digit(int num)
{
int max = 0;
while (num > 1)
{
num /= 10;
max++;
}
return max;
}
int digit_value(int num, int digit)
{
while (digit>1)
{
num /= 10;
digit--;
}
return num % 10;
}
void radix_sort(int **dop_mas, int *mas, int digit)
{
int *mas_col, i, j, temp = 0; //mas_col - в скольки числах есть определенная цифра (напр., mas_col[5] = 2 - в двух числах есть пятерка
mas_col = new int[10]; //Здесь падает
for (i = 0; i<10; i++)
mas_col[i] = 0;
for (i = 0; i<n; i++)
{
int a = digit_value(mas[i], digit);
dop_mas[mas_col[a]][a] = mas[i]; //mas_col заполняется неправильно
mas_col[a]++;
}
for (i = 0; i<n; i++)
{
for (j = 0; j<mas_col[i]; j++)
{
mas[temp] = dop_mas[j][i];
temp++;
}
}
}
int main()
{
int digit, i, *mas, **dop_mas;
cout << "Razmer massiva: " << endl;
cin >> n;
mas = new int[n];
cout << "Elementy massiva: " << endl;
for (i = 0; i<n; i++)
{
cout << "[" << i + 1 << "]= ";
scanf("%x", &mas[i]);
}
dop_mas = new int*[n];
for (i = 0; i<n; i++)
dop_mas[i] = new int[n]; //Здесь скорее всего не n
for (i = 0; i<n; i++)
if (digit_amt < max_digit(mas[i]))
digit_amt = max_digit(mas[i]); //3
for (digit = 1; digit <= digit_amt; digit++) //
radix_sort(dop_mas, mas, digit);
for (i = 0; i<n; i++)
cout << dec << mas[i] << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSAibG9jYWxlLmgiCiNpbmNsdWRlIDxzdGRpby5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbiwgZGlnaXRfYW10ID0gMDsgLy9kaWdpdCBhbW91bnQgLSDQutC+0LvQuNGH0LXRgdGC0LLQviDRgNCw0LfRgNGP0LTQvtCyCmludCBtYXhfZGlnaXQoaW50IG51bSkKewoJaW50IG1heCA9IDA7Cgl3aGlsZSAobnVtID4gMSkKCXsKCQludW0gLz0gMTA7CgkJbWF4Kys7Cgl9CglyZXR1cm4gbWF4Owp9CgppbnQgZGlnaXRfdmFsdWUoaW50IG51bSwgaW50IGRpZ2l0KQp7Cgl3aGlsZSAoZGlnaXQ+MSkKCXsKCQludW0gLz0gMTA7CgkJZGlnaXQtLTsKCX0KCXJldHVybiBudW0gJSAxMDsKfQoKdm9pZCByYWRpeF9zb3J0KGludCAqKmRvcF9tYXMsIGludCAqbWFzLCBpbnQgZGlnaXQpCnsKCWludCAqbWFzX2NvbCwgaSwgaiwgdGVtcCA9IDA7IC8vbWFzX2NvbCAtINCyINGB0LrQvtC70YzQutC4INGH0LjRgdC70LDRhSDQtdGB0YLRjCDQvtC/0YDQtdC00LXQu9C10L3QvdCw0Y8g0YbQuNGE0YDQsCAo0L3QsNC/0YAuLCBtYXNfY29sWzVdID0gMiAtINCyINC00LLRg9GFINGH0LjRgdC70LDRhSDQtdGB0YLRjCDQv9GP0YLQtdGA0LrQsAoKCW1hc19jb2wgPSBuZXcgaW50WzEwXTsgLy/Ql9C00LXRgdGMINC/0LDQtNCw0LXRggoJZm9yIChpID0gMDsgaTwxMDsgaSsrKQoJCW1hc19jb2xbaV0gPSAwOwoJZm9yIChpID0gMDsgaTxuOyBpKyspCgl7CgkJaW50IGEgPSBkaWdpdF92YWx1ZShtYXNbaV0sIGRpZ2l0KTsKCQlkb3BfbWFzW21hc19jb2xbYV1dW2FdID0gbWFzW2ldOyAvL21hc19jb2wg0LfQsNC/0L7Qu9C90Y/QtdGC0YHRjyDQvdC10L/RgNCw0LLQuNC70YzQvdC+CgkJbWFzX2NvbFthXSsrOwoJfQoJZm9yIChpID0gMDsgaTxuOyBpKyspCgl7CgkJZm9yIChqID0gMDsgajxtYXNfY29sW2ldOyBqKyspCgkJewoJCQltYXNbdGVtcF0gPSBkb3BfbWFzW2pdW2ldOwoJCQl0ZW1wKys7CgkJfQoJfQp9CgppbnQgbWFpbigpCnsKCWludCBkaWdpdCwgaSwgKm1hcywgKipkb3BfbWFzOwoJY291dCA8PCAiUmF6bWVyIG1hc3NpdmE6ICIgPDwgZW5kbDsKCWNpbiA+PiBuOwoJbWFzID0gbmV3IGludFtuXTsKCWNvdXQgPDwgIkVsZW1lbnR5IG1hc3NpdmE6ICIgPDwgZW5kbDsKCWZvciAoaSA9IDA7IGk8bjsgaSsrKQoJewoJCWNvdXQgPDwgIlsiIDw8IGkgKyAxIDw8ICJdPSAiOwoJCXNjYW5mKCIleCIsICZtYXNbaV0pOwoJfQoJZG9wX21hcyA9IG5ldyBpbnQqW25dOwoJZm9yIChpID0gMDsgaTxuOyBpKyspCgkJZG9wX21hc1tpXSA9IG5ldyBpbnRbbl07IC8v0JfQtNC10YHRjCDRgdC60L7RgNC10LUg0LLRgdC10LPQviDQvdC1IG4KCWZvciAoaSA9IDA7IGk8bjsgaSsrKQoJCWlmIChkaWdpdF9hbXQgPCBtYXhfZGlnaXQobWFzW2ldKSkKCQkJZGlnaXRfYW10ID0gbWF4X2RpZ2l0KG1hc1tpXSk7IC8vMwoJZm9yIChkaWdpdCA9IDE7IGRpZ2l0IDw9IGRpZ2l0X2FtdDsgZGlnaXQrKykgLy8KCQlyYWRpeF9zb3J0KGRvcF9tYXMsIG1hcywgZGlnaXQpOwoJZm9yIChpID0gMDsgaTxuOyBpKyspCgkJY291dCA8PCBkZWMgPDwgbWFzW2ldIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==