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

RFpro.ru: Программирование на Delphi


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

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

Чемпионы рейтинга экспертов в этой рассылке

Jimhucksly
Статус: 5-й класс
Рейтинг: 676
∙ повысить рейтинг »
Тимошенко Дмитрий
Статус: Студент
Рейтинг: 390
∙ повысить рейтинг »
VolRus
Статус: 5-й класс
Рейтинг: 363
∙ повысить рейтинг »

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

Номер выпуска:1424
Дата выхода:27.08.2009, 10:35
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:567 / 198
Вопросов / ответов:1 / 1

Вопрос № 171523: Здравствуйте уважаемые эксперты! Помогите пожалуйста написать программу-пример сортирования выведенной случайной последовательности чисел на Memo1 (после нажатия на кнопку1) методом "пирамидальной сортировки" и последующем выводом о...



Вопрос № 171523:

Здравствуйте уважаемые эксперты! Помогите пожалуйста написать программу-пример сортирования выведенной
случайной последовательности чисел на Memo1 (после нажатия на кнопку1) методом "пирамидальной сортировки"
и последующем выводом отсортированной последовательности на Memo2 (после нажатия на кнопку2). Спасибо всем :)

Отправлен: 22.08.2009, 09:31
Вопрос задал: Николай // Programmator , Студент
Всего ответов: 1
Страница вопроса »


Отвечает Евгений/Genia007/, Студент :
Здравствуйте, Николай // Programmator .
Предлагаю свой вариант решения данной задачи
Код:
unit Unit10;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ar: array [0..99] of integer;

implementation

{$R *.dfm}

procedure Sort(var Arr: array of integer; Count: Integer);

procedure DownHeap( index, Count: integer; Current: integer);
//Функция пробегает по пирамиде восстанавливая ее
//Также используется для изначального создания пирамиды
//Использование: Передать номер следующего элемента в index
//Процедура пробежит по всем потомкам и найдет нужное место для следующего элемента
var
Child: Integer;
begin
while index < Count div 2 do begin
Child := (index+1)*2-1;
if (Child < Count-1) and (Arr[Child] < Arr[Child+1]) then
Child:=Child+1;
if Current >= Arr[Child] then
break;
Arr[index] := Arr[Child];
index := Child;
end;
Arr[index] := Current;
end;

//Основная функция
var
i: integer;
Current: integer;
begin
//Собираем пирамиду
for i := (Count div 2)-1 downto 0 do
DownHeap(i, Count, Arr[i]);
//Пирамида собрана. Теперь сортируем
for i := Count-1 downto 0 do begin
Current := Arr[i]; //перемещаем верхушку в начало отсортированного списка
Arr[i] := Arr[0];
ar[i]:= arr[i];
DownHeap(0, i, Current); //находим нужное место в пирамиде для нового элемента
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
Memo1.Clear;
Memo2.Clear;
for i:= 0 to 99 do
begin
ar[i]:= random(100);
Memo1.Lines.Add(IntToStr(ar[i]));
end;
Sort(ar, 100);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
for I := 0 to 99 do
Memo2.Lines.Add(IntToStr(ar[i]))
end;

end.

После нажатия на 1 кнопку, происходит заполнения исходного массива случайными числами в количестве 100 шт. И вызов процедуры сортировки методом пирамиды (Sort(ar, 100);), процедура была взята с сайта ВикипедиЯ. Вывод на 2 memo происходит после нажатия 2 кнопки.
-----
Помогли тебе, помоги и ты.

Ответ отправил: Евгений/Genia007/, Студент
Ответ отправлен: 22.08.2009, 14:39

Оценка ответа: 5
Комментарий к оценке:
Cпасибо Вам! Сортировку выбором и методом Шелла в Deplhi реализовал, а вот с пирамидальной по сложнее :(( Спасибо Вам ещё раз :))

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253462 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

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

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.7 от 15.08.2009

    В избранное