Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Адресная сортировка 
:(
    Опции темы
ftp27host
Дата 26.8.2010, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.10.2009

Репутация: нет
Всего: нет



Напишите, пожалуйста, пример адресной сортировки. По скудным описаниям в интернете никак не пойму как она вообще работает :(
PM MAIL   Вверх
THandle
Дата 27.8.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена!

Добавлено через 32 секунды
ftp27host, а можешь дать хоть какое то описание данной сортировки?
PM   Вверх
kemiisto
Дата 27.8.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Возможно речь идёт о сортировке вставками (Insertion sort). Или есть ещё Multiple Link List Sort. Там тоже для каждого элементам вычисляется его адрес в отсортированном массиве.


--------------------
PM MAIL WWW GTalk Jabber   Вверх
ftp27host
Дата 31.8.2010, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.10.2009

Репутация: нет
Всего: нет



Цитата

Вот про адресную сор-ку:используется для целых чисел не очень большого диапазона. Идея сортировки: для каждого элемента массива определить количество элементов меньше его находящихся в данном массиве, после чего поместить этот элемент на соответствующее место. Сор-ка проходит следующим образом: за линейный проход для каждого значения подсчитываем сколько раз он втречается в данном массиве, затем определяем сумму всех предыдущих элементов и таким образом получаем позицию для вставки соответствующего элемента (опять за линейный прход). Необходимо следить, чтобы 2 одинаковых эл-та не были записаны на одно и то же место.
Код

var mas: array [0..n] of byte;
a: array [byte] of o..n;
for i:= 0 to n do a[mas[i]] :=a[mas[i]]+1;
k:=0;
s:=0;
for i:=0 to 255 do
if a[i] <>0 then
begin
s:=s+a[i];
while k+1<>s do begin k:=k+1;
mas[k]:=i;
end;
end.



PM MAIL   Вверх
kemiisto
Дата 1.9.2010, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 16
Всего: 160



Ну, если допустить, что описание дурацкое, то это сортировка подсчётом (Counting sort). 

Код

PROGRAM Sort;

CONST
  n = 8;
  k = 100;

TYPE
  IntegerArray = ARRAY [0..n-1] OF INTEGER;

PROCEDURE Fill(var a: IntegerArray);
BEGIN
  a[0] := 44;
  a[1] := 55;
  a[2] := 12;
  a[3] := 42;
  a[4] := 94;
  a[5] := 18;
  a[6] := 06;
  a[7] := 67;  
END;  
  
PROCEDURE Print(a: IntegerArray);
VAR
  i: INTEGER;
BEGIN
  FOR i := 0 TO n - 1 DO
    Write(a[i], ' ');
  Writeln;
END;  

PROCEDURE CountingSort(VAR a: IntegerArray);
VAR
  i, j, b: INTEGER; 
  c: ARRAY [0..k-1] OF INTEGER;
BEGIN
  FOR i := 0 TO n - 1 DO
    c[i] := 0;
  FOR i := 0 TO n - 1 DO
    Inc(c[a[i]]);
  b := 0;
  FOR j := 0 TO k - 1 DO
    FOR i := 0 TO c[j] - 1 DO
    BEGIN
      a[b] := j;
      b := b + 1;
    END;
END;

VAR ia: IntegerArray;
  
BEGIN
  Fill(ia);
  Print(ia);
  CountingSort(ia);
  Print(ia);
END.



Это сообщение отредактировал(а) kemiisto - 1.9.2010, 00:18


--------------------
PM MAIL WWW GTalk Jabber   Вверх
ftp27host
Дата 1.9.2010, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 28.10.2009

Репутация: нет
Всего: нет



Спасибо, kemiisto. Немного переделал и все сработало.
p.s. Какой нерациональный алгоритм >.>
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.