Алгоритм взят из книги Седжвика, но корректно он не работает.
Сортировка LSD двоичная.
http://pastebin.com/6Bk12eZK
буду очень признателен.
Другие языки программирования и технологии
Помогите разобраться с кодом
И снова здравствуйте.
Очень часто в переводных книгах полно опечаток, а то и просто пропущены некоторые строки, к примеру в вашем коде нет удаления выделенной оператором 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
С "ответов" копировать бесполезно :-( -- код испортился.
Очень часто в переводных книгах полно опечаток, а то и просто пропущены некоторые строки, к примеру в вашем коде нет удаления выделенной оператором 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
С "ответов" копировать бесполезно :-( -- код испортился.
Дебет с кредитом, а сальдо - в карман
Похожие вопросы
- Помогите разобраться с кодом. Ошибка в строчке for (int i = 0, i > 100, i++) {
- Помогите разобраться в коде. Язык Фортран
- Помогите разобраться с кодом Delphi
- Пожалуйста помогите разобраться с даним кодом C++. Тема : Односвязание списки
- Помогите разобраться в програмном коде на С++
- Помогите разобраться в старом коде Фортрана...
- Прошу помочь разобраться, пояснить некоторые пункты требования ТИПОГРАФИИ.
- Про С++ .Не получается явное преобразование типов. Помогите разобраться. Код внутри.
- Помогите разобраться с эллементарной задачей, нужно чуть-чуть доработать код.
- HTML! помогите пожалуйста написать код для сайта простого сайта!