#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, unsigned 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()
{
unsigned int *mas;
int digit, i, **dop_mas;
cout << "Razmer massiva: " << endl;
cin >> n;
mas = new unsigned 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+MSkKCXsKCQludW0gLz0gMTA7CgkJZGlnaXQtLTsKCX0KCXJldHVybiBudW0gJSAxMDsKfQoKdm9pZCByYWRpeF9zb3J0KGludCAqKmRvcF9tYXMsIHVuc2lnbmVkIGludCAqbWFzLCBpbnQgZGlnaXQpCnsKCWludCAqbWFzX2NvbCwgaSwgaiwgdGVtcCA9IDA7IC8vbWFzX2NvbCAtINCyINGB0LrQvtC70YzQutC4INGH0LjRgdC70LDRhSDQtdGB0YLRjCDQvtC/0YDQtdC00LXQu9C10L3QvdCw0Y8g0YbQuNGE0YDQsCAo0L3QsNC/0YAuLCBtYXNfY29sWzVdID0gMiAtINCyINC00LLRg9GFINGH0LjRgdC70LDRhSDQtdGB0YLRjCDQv9GP0YLQtdGA0LrQsAoKCW1hc19jb2wgPSBuZXcgaW50WzEwXTsgLy/Ql9C00LXRgdGMINC/0LDQtNCw0LXRggoJZm9yIChpID0gMDsgaTwxMDsgaSsrKQoJCW1hc19jb2xbaV0gPSAwOwoJZm9yIChpID0gMDsgaTxuOyBpKyspCgl7CgkJaW50IGEgPSBkaWdpdF92YWx1ZShtYXNbaV0sIGRpZ2l0KTsKCQlkb3BfbWFzW21hc19jb2xbYV1dW2FdID0gbWFzW2ldOyAvL21hc19jb2wg0LfQsNC/0L7Qu9C90Y/QtdGC0YHRjyDQvdC10L/RgNCw0LLQuNC70YzQvdC+CgkJbWFzX2NvbFthXSsrOwoJfQoJZm9yIChpID0gMDsgaTxuOyBpKyspCgl7CgkJZm9yIChqID0gMDsgajxtYXNfY29sW2ldOyBqKyspCgkJewoJCQltYXNbdGVtcF0gPSBkb3BfbWFzW2pdW2ldOwoJCQl0ZW1wKys7CgkJfQoJfQp9CgppbnQgbWFpbigpCnsKICAgIHVuc2lnbmVkIGludCAqbWFzOwoJaW50IGRpZ2l0LCBpLCAqKmRvcF9tYXM7Cgljb3V0IDw8ICJSYXptZXIgbWFzc2l2YTogIiA8PCBlbmRsOwoJY2luID4+IG47CgltYXMgPSBuZXcgdW5zaWduZWQgaW50W25dOwoJY291dCA8PCAiRWxlbWVudHkgbWFzc2l2YTogIiA8PCBlbmRsOwoJZm9yIChpID0gMDsgaTxuOyBpKyspCgl7CgkJY291dCA8PCAiWyIgPDwgaSArIDEgPDwgIl09ICI7CgkJc2NhbmYoIiV4IiwgJm1hc1tpXSk7Cgl9Cglkb3BfbWFzID0gbmV3IGludCpbbl07Cglmb3IgKGkgPSAwOyBpPG47IGkrKykKCQlkb3BfbWFzW2ldID0gbmV3IGludFtuXTsgLy/Ql9C00LXRgdGMINGB0LrQvtGA0LXQtSDQstGB0LXQs9C+INC90LUgbgoJZm9yIChpID0gMDsgaTxuOyBpKyspCgkJaWYgKGRpZ2l0X2FtdCA8IG1heF9kaWdpdChtYXNbaV0pKQoJCQlkaWdpdF9hbXQgPSBtYXhfZGlnaXQobWFzW2ldKTsgLy8zCglmb3IgKGRpZ2l0ID0gMTsgZGlnaXQgPD0gZGlnaXRfYW10OyBkaWdpdCsrKSAvLwoJCXJhZGl4X3NvcnQoZG9wX21hcywgbWFzLCBkaWdpdCk7Cglmb3IgKGkgPSAwOyBpPG47IGkrKykKCQljb3V0IDw8IGRlYyA8PCBtYXNbaV0gPDwgZW5kbDsKCXJldHVybiAwOwp9