Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 136
от 06.02.2006, 18:39

Администратор:Калашников О.А.
В рассылке:Подписчиков: 161, Экспертов: 34
В номере:Вопросов: 1, Ответов: 3


Вопрос № 34563: Здравствуйте! Можете расказать о сортировке массивов методом обмена и разбиением отрезка попалам, если можно с примерами? Заранее благодарен!...

Вопрос № 34.563
Здравствуйте!
Можете расказать о сортировке массивов методом обмена и
разбиением отрезка попалам, если можно с примерами?
Заранее благодарен!
Отправлен: 01.02.2006, 18:37
Вопрос задал: [TiER] (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Лучников Юрий Владимирович
Здравствуйте, [TiER]!

Хороший теоретический материал по алгоритмам сортировки с примерами вы можете найти по ссылке : http://algolist.manual.ru/sort/index.php

Успехов!
Ответ отправил: Лучников Юрий Владимирович (статус: Студент)
Отправлен: 01.02.2006, 19:07
Оценка за ответ: 5

Отвечает: Tigran K. Kalaidjian
Здравствуйте, [TiER]!

Это классика. То, что Вы ищете с примерами есть тут:
http://alglib.sources.ru/sorting/
Только метод обмена там называется "методом пузырька"
---------
aqua nostra ignis est
Ответ отправил: Tigran K. Kalaidjian (статус: Профессионал)
Отправлен: 01.02.2006, 22:22
Оценка за ответ: 5

Отвечает: Евгения
Здравствуйте, [TiER]!

А) Сортировка массива методом простого обмена (также метод "Пузырька"):

Берется одномерный массив, например:
а=[3, 5, -1, 5, 7, 23, 0, -11, 8, 9]

Задача: отсортировать массив, например, по возрастанию (>) (также можно по убыванию (<), по невозрастанию (<=), по неубыванию (>=)).

Первый просмотр массива:
1. Сравниваются по очереди каждые два соседних элемента массива (1 и 2, 2 и 3, ..., n-1 и n) и если они не соответсвуют необходимому порядку, то меняются местами...

3 5 -1 5 7 23 0 -11 8 9
__
3 5 -1 5 7 23 0 -11 8 9
__
3 -1 5 5 7 23 0 -11 8 9
__
3 -1 5 5 7 23 0 -11 8 9
__
3 -1 5 5 7 23 0 -11 8 9
__
3 -1 5 5 7 23 0 -11 8 9
__
3 -1 5 5 7 0 23 -11 8 9
___
3 -1 5 5 7 0 -11 23 8 9
__
3 -1 5 5 7 0 -11 8 23 9
__
3 -1 5 5 7 0 -11 8 9 23

Тем самым самое большое число как бы "всплыло" и находится на последнем месте.
Терепь мы можем рассматривать только элементы с 1 до n-1...

2. На этом этапе "всплывет" 9:

-1 3 5 5 0 -11 7 8 9 23

3. 8

-1 3 5 0 -11 5 7 8 9 23

4. 7

-1 3 0 -11 5 5 7 8 9 23

5. 5

-1 0 -11 3 5 5 7 8 9 23

6. 5

-1 -11 0 3 5 5 7 8 9 23

7. 3

-11 -1 0 3 5 5 7 8 9 23 (и хотя на этом этапе массив уже отсортирован, но мы все доделываем до конца, т.к. в самом плохом случае (если массив будет отсортирован перед началом по убыванию...) изменения будут происходить до конца)

8. 0

-11 -1 0 3 5 5 7 8 9 23

9. -1

-11 -1 0 3 5 5 7 8 9 23

10 раз не надо делать, т.к. самый маленький элемент автоматически окажется на последнем месте...

По сортировкам массивов в интернете очень много всяческой информации, в том числе очень подробной и понятной...

В) Под сортировкой массива методом разбиения отрезка пополам я думаю, что вы имели ввиду быструю сортировку Хоара. (т.к. еще имеется поиск элемента в отсортированном массиве методом деления пополам). При написании программы на эту сортировку используется рекурсия...

Пример программы:
procedure hoar(var a:arr; l,p:integer);
var i,j,t,x:integer;
begin
i:=l;
j:=p;
while i<j do
begin
x:=a[(l+p) div 2];
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then begin
t:=a[i];
a[i]:=a[j];
a[j]:=t;
inc(i);
dec(j); end;
if l<j then hoar(a,l,j);
if i<p then hoar(a,i,p);
end;
end;

Берется интервал массива:
на этом интервале находим средний элемент, потом идем от начала интервала до элемента большего среднего слева (i) и до элемента меньшего среднего справа (j) - меняем их местами... продвигаесмя еще на один шаг...
Сейчас рассматриваем интервалы от начала предыдущегодо j и от i до конца предыдущего...

Попробуйте протрассировать программу самостоятельно... если есть еще вопросы... пишите...

Если в чем-то не права, извините.
Ответ отправила: Евгения (статус: 1-ый класс)
Отправлен: 01.02.2006, 23:07
Оценка за ответ: 5
Комментарий оценки:
Спасибо


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Яндекс Rambler's Top100

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное