Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 14:02   #1
Карол
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 25
По умолчанию Сортировка методом линейного выбора и "быстрая" сортировка

Уважаемые программисты, помогите с заданием: надо отсотировать массив методом линейного выбора и методом быстрой сортировки, но что -то не получается. Метод линейного выбора
Цитата:
writeln ('Sortirovka massiva');
writeln('VVesti chislo elementov massiva');
readln(n);
for i:=1 to n-1 do
begin
min := i;
for j:=i+1 to n do
if massiv[j]<massiv[min] then begin
min := j;
temp := massiv[min];
massiv[min] :=massiv[i];
massiv[i] := temp; end;
но он неправильно сортирует!!! что неправильно???
И помогите,пожалуйста, реализовать метод быстрой сортировка.
Зараннее благодарен!!!

Последний раз редактировалось Карол; 27.09.2009 в 14:07.
Карол вне форума Ответить с цитированием
Старый 27.09.2009, 14:10   #2
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
Type
  arrType = Array[1 .. n] Of Integer;
{быстрая сортировка}
Procedure HoarSecond(Var ar: arrType; n: Integer);

  Procedure Sort(m, l: Integer);
  Var i, j, x, w: Integer;
  Begin
    If m >= l Then Exit;
    i := m; j := l;
    x := ar[(m+l) div 2];

    While i < j Do
      If ar[i] < x Then Inc(i)
      Else If ar[j] > x Then Dec(j)
             Else Begin
               w := ar[i]; ar[i] := ar[j]; ar[j] := w;
             End;

    Sort(m, Pred(j));
    Sort(Succ(i),l);
  End;

Begin
  Sort(1, n)
End;
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 27.09.2009, 14:17   #3
Карол
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 25
По умолчанию

спасибо за помощь!!!
а что не так с первым кодом???
Карол вне форума Ответить с цитированием
Старый 27.09.2009, 19:24   #4
Карол
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 25
По умолчанию

А можете мне еще подсказать как объединить 2 метода сортировки в одной программе, т.е по нажатию клавиши 3 массив сортируется методом выбора, а по нажатию 4 быстрой сортировкой. А то что-то у меня не получается.То что у меня есть вот
Цитата:
program Project_Sort;

const
max=10000;
type
TMassivInt=array [1..max] of integer;
var
massiv: TMassivInt;

key: byte;
x:integer;



Procedure Show(var massiv: TMassivInt; n:integer);
var
i: integer;
begin
write ('Prosmotr massiva: ');
for i := 1 to n do Write (massiv[i],' ');{вывод на экран}
writeln;
writeln;
end;


Procedure Create(var massiv: TMassivInt; n:integer);
var
i: integer;
begin
writeln ('Sozdat massiv');
write ('Zadat chislo elementov v massive: ');
readln (n);
Randomize;
for i := 1 to n do massiv[i]:=random (100);
Show(massiv, n);
end;


procedure Sort(var massiv: TMassivInt; n:integer );
var
i, j, temp, min:integer;
begin
writeln ('Sortirovka massiva');
writeln('VVesti chislo elementov massiva');
readln(n);
for i:=1 to n-1 do
begin
min := i;
for j:=i+1 to n do
if massiv[j]<massiv[min] then
min := j;
temp := massiv[min];
massiv[min] :=massiv[i];
massiv[i] := temp;
Show(massiv, n);
end;
end;


procedure Quick(var massiv: TMassivInt; n:integer);
var main,s,ram,i,j,k:integer;
begin
if j = k then exit;
main := massiv[j];
s := j+1;
for i := j+1 to k do
if massiv[i] < main then
begin
ram := massiv[i]; massiv[i] := massiv[s]; massiv[s] := ram;
ram := massiv[s]; massiv[s] := massiv[s-1]; massiv[s-1] := ram;
if s <> k then s := s + 1;
end;
Quick(massiv, n);
Quick(massiv, n);
end;

procedure QuickSort(var massiv:TMassivInt;n:integer);
var j,k:integer;
begin
j := 1;
k := n;
Quick (d,j,k);
end;


BEGIN

Writeln ('1: Sozdat massiv');
Writeln ('2: Prosmotr massiva');
Writeln ('3: Sortirovka massiva');
Writeln ('0: Exit');

Repeat

Write('Vibrat kommandu: ');
Readln (key);
case key of
1: Create (massiv, x);
2: begin
writeln ('Prosmotr massiva');
write ('Vvesti chislo elementov v massive: ');
readln (x);
Show (massiv, x);
end;
3: Sort (massiv, x);
end;
until key=0;
end.
Карол вне форума Ответить с цитированием
Старый 27.09.2009, 19:52   #5
Карол
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 25
По умолчанию

Помогите!!! Очень срочно надо!!!
Карол вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сортировка методом выбора...паскаль... Оксаночка:) Помощь студентам 5 29.06.2009 23:26
Сортировка методом выбора на С++, возможно ошибка Graf Xandr Помощь студентам 4 09.05.2009 15:06
[pascal]Сортировка массива методом прямого выбора, работает неадекватно. fatoldsun Помощь студентам 7 22.04.2009 19:42
PHP(или другой язык): Получить все пары "имя" -> "значение" переданные методом POST KingOfNothing PHP 4 12.04.2009 14:06
Сортировка массива методом прямого выбора(Дельфи) Onza Помощь студентам 20 25.01.2009 12:05