Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: (С++) Сортировка распределением  (Прочитано 2290 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн [DarkNet]Alpha

  • Автор темы
  • Активист
  • *
  • Сообщений: 987
  • Эмоциональный эльдар
    • Просмотр профиля
    • EBM-радио
(С++) Сортировка распределением
« : 25 Октябрь 2011, 01:26:33 »
Зацените реализацию. Критика приветствуется.

(Нажмите, чтобы показать/скрыть)

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #1 : 25 Октябрь 2011, 08:00:16 »
Отличная реализация (правда не тестировал).
 
Вот еще вариант:
(Нажмите, чтобы показать/скрыть)

// Используйте тег код.
« Последнее редактирование: 25 Октябрь 2011, 13:22:07 от RazrFalcon »

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #2 : 25 Октябрь 2011, 10:22:17 »
Зацените реализацию. Критика приветствуется.

(Нажмите, чтобы показать/скрыть)
Хреновый код.
Во-первых, нет проверки входных параметров, например, if(!_array || (_size < 1)) return;
Во-вторых, функция abs - лишняя, поскольку (max - min) всегда неотрицательно.
В-третьих, массив amount неинициализирован и строго говоря там может оказаться "мусор".

P.S. И еще посмотри, каков будет размер массива amount при входном массиве [10000, 1, -10000].
« Последнее редактирование: 25 Октябрь 2011, 11:15:45 от Красноглазый »

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #3 : 25 Октябрь 2011, 12:46:30 »
>>Во-первых, нет проверки входных параметров, например, if(!_array || (_size < 1)) return;
Входные параметры можно проверить перед вызовом.
>>Во-вторых, функция abs - лишняя, поскольку (max - min) всегда неотрицательно.
Не критично
>>В-третьих,
Согласен

// не стоит злоупотреблять цветами текста
« Последнее редактирование: 25 Октябрь 2011, 13:23:08 от RazrFalcon »

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: (С++) Сортировка распределением
« Ответ #4 : 25 Октябрь 2011, 13:24:08 »
Зацените реализацию. Критика приветствуется.
А что оно делает то?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #5 : 25 Октябрь 2011, 13:29:55 »
Проверять параметры надо именно в процедуре, чтобы не проверять каждый раз перед вызовом. Тем более, что без проверки код потенциально опасен.
Если уж использовать именно такой алгоритм, то я бы сделал как-то так:
(Нажмите, чтобы показать/скрыть)

Пользователь решил продолжить мысль 25 Октябрь 2011, 13:31:00:
А что оно делает то?
Сортирует массив через статистический массив попаданий.

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #6 : 25 Октябрь 2011, 13:38:03 »
>>Проверять параметры надо именно в процедуре, чтобы не проверять каждый раз перед вызовом. Тем более, что без проверки код потенциально опасен.

Надо смотреть контекст вызова. Возможно вызов уже с гарантированно правильными
параметрами.

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: (С++) Сортировка распределением
« Ответ #7 : 25 Октябрь 2011, 13:39:38 »
Сортировка числового массива?  ???
Что-то не въезжаю...
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн [DarkNet]Alpha

  • Автор темы
  • Активист
  • *
  • Сообщений: 987
  • Эмоциональный эльдар
    • Просмотр профиля
    • EBM-радио
Re: (С++) Сортировка распределением
« Ответ #8 : 25 Октябрь 2011, 13:42:39 »
Цитировать
Во-первых, нет проверки входных параметров, например, if(!_array || (_size < 1)) return;
Во-вторых, функция abs - лишняя, поскольку (max - min) всегда неотрицательно.
Вы таки правы.
Цитировать
В-третьих, массив amount неинициализирован и строго говоря там может оказаться "мусор".
А вот здесь нет. Волшебные скобки в конце строки int *amount = new int[amountSize] (); заполняют массив нулями.
Цитировать
P.S. И еще посмотри, каков будет размер массива amount при входном массиве [10000, 1, -10000].
А вот тут не знаю, как поправить. Есть идеи?

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #9 : 25 Октябрь 2011, 13:59:20 »
Волшебные скобки в конце строки int *amount = new int[amountSize] (); заполняют массив нулями.
А пруф привести можно? Что-то я такого нигде не видел...
Цитировать
P.S. И еще посмотри, каков будет размер массива amount при входном массиве [10000, 1, -10000].
А вот тут не знаю, как поправить. Есть идеи?
Это проблема алгоритма. Можно использовать двойной массив 2 x _size. Первый элемент - индекс, второй - значение. Но тогда поиск в массиве будет перебором, а не смещением. Выигрыш в памяти за счет использования процессора.
А чем пузырьковая сортировка не устраивала?

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #10 : 25 Октябрь 2011, 14:19:56 »
Пузырьковая годится для коротких последовательностей с небольшим размером элементов.
Хотя в почти любом алгоритме сортировки, что бы избежать пересылки больших объемов данных,
можно ввести массив указателей на эти элементы и сортировать по указателям.

Оффлайн [DarkNet]Alpha

  • Автор темы
  • Активист
  • *
  • Сообщений: 987
  • Эмоциональный эльдар
    • Просмотр профиля
    • EBM-радио
Re: (С++) Сортировка распределением
« Ответ #11 : 25 Октябрь 2011, 14:23:18 »
Пруф дать пока не могу, это мне товарищ подсказал. Можете проверить.
Интересно узнать разные методы.

Оффлайн Красноглазый

  • Активист
  • *
  • Сообщений: 705
    • Просмотр профиля
Re: (С++) Сортировка распределением
« Ответ #12 : 25 Октябрь 2011, 15:16:20 »
С двойным массивом как-то так:
(Нажмите, чтобы показать/скрыть)

 

Страница сгенерирована за 0.073 секунд. Запросов: 26.