Другие языки программирования и технологии

Помогите разобраться с кодом

Алгоритм взят из книги Седжвика, но корректно он не работает.
Сортировка LSD двоичная.
http://pastebin.com/6Bk12eZK
буду очень признателен.
1 441
И снова здравствуйте.

Очень часто в переводных книгах полно опечаток, а то и просто пропущены некоторые строки, к примеру в вашем коде нет удаления выделенной оператором new памяти. Попробуйте так:

#include <ctime>
#include <cstdlib>
#include <iostream>

const int bitsword = 32;
const int bitsbyte = 8 ;
const int bytesword = bitsword/bitsbyte;
const int R = 1 << bitsbyte;
const int maxN = 100;

inline int digit(long A, int B) { return (A >> bitsbyte * (bytesword - B - 1)) & (R - 1); }

template <class>
void radixLSD(Item a[], int l, int r, int maxN) {
Item *aux = new Item[maxN];
for (int d = bytesword-1; d >= 0; d--) {
int i, j, count[R+1];
for (j = 0; j < R; j++) count[j] = 0;
for (i = l; i <= r; i++) count[digit(a[ i], d) + 1]++;
for (j = 1; j < R; j++) count[j] += count[j-1];
for (i = l; i <= r; i++) aux[count[digit(a[ i], d)]++] = a[ i];
for (i = l; i <= r; i++) a[ i] = aux[i-l];
}
delete[] aux;
}

int main() {
int a[10];
srand(time(0));
for (int i=0; i<10; i++) {
a[ i]=rand () 0;
std::cout << a[ i] << " ";
}
std::cout << std::endl;
radixLSD (a, 0, 9, 10);
for (int i=0; i<10; i++) std::cout << a[ i] << " ";
std::cout << std::endl;
}

Ссылка: http://pastebin.com/ghCiJcnM
С "ответов" копировать бесполезно :-( -- код испортился.
Алексей Башан
Алексей Башан
96 060
Лучший ответ
Дебет с кредитом, а сальдо - в карман