Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.12.2015, 21:50
Appolinariya_ Appolinariya_ вне форума
Прохожий
 
Регистрация: 26.09.2015
Сообщения: 13
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Рекурсия

Помогите добавить рекурсию в сортировку простым выбором. Пожалуйста,очень срочно! И гляньте вывод исходного и полученного массива. нельзя портить исходные данные. Исходные в моей программе выводятся
Вот сама сортировка:
Код:
program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  SysUtils;
 
const
 max=100;
type
 mass=array[1..max] of integer;
var
 i, j, n: integer;
 A: mass;
 flag:boolean;
procedure vvodposl(var a:mass;var n:integer);
var
 fin: textfile;
 i:integer;
begin
 assignfile(fin,'f1.txt');
 reset(fin);
 readln(fin,n);
 for i:=1 to n do
  read(fin,a[i]);
 close(fin);
end;
 
procedure vivodposl(const a:mass;var n:integer;flag:boolean);
var
 i:integer;
 fout:text;
begin
 assign(fout,'f2.txt');
 if flag then
  rewrite(fout)
 else
  append(fout);
 write(fout,'ÈñõîäГ*Г*Гї ïîñëåäîâГ*òåëüГ*îñòü: ');
 for i:=1 to n do
   write(fout,a[i]);
  writeln(fout);
 close(fout);
end;
 
procedure SelectionSort(A: mass; n: integer);
var
 min, t: integer;
begin
 for i:=1 to n do
 begin
  t:=A[i];
  min:=i;
 for j:=i+1 to n do
 if (A[min]>A[j])then
  min:=j;
 if (min<>i) then
 begin
  A[i]:=A[min];
  A[min]:=t;
 end;
 end;
end;
 
begin
 vvodposl(a,n);
 flag:=true;
 vivodposl(a,n,flag);
 SelectionSort(A,n);
 flag:=false;
 vivodposl(a,n,flag);
end.
Ответить с цитированием
  #2  
Старый 19.12.2015, 23:42
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Рекурсия в сортировке простым выбором? Вот это поворот. Ну да ладно. Как-то так, например:
Код:
procedure SelectionSort(A: mass; n: integer; i: integer);
var
    min, t: integer;
begin
    t:=A[i];
    min:=i;
    for j:=i+1 to n do
        if (A[min]>A[j])then
            min:=j;
    if (min<>i) then
    begin
        A[i]:=A[min];
        A[min]:=t;
    end;
    if i < n then
        SelectionSort(a, n, i + 1);
end;
А главную процедуру можно сократить.
Код:
vvodposl(a,n);
vivodposl(a,n,true);
SelectionSort(A,n,1);
vivodposl(a,n,false);
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 19.12.2015 в 23:47.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:02.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025