IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Объясните методы сортировки массивов( для идиотки) (http://www.imho.ws/showthread.php?t=134353)

Levilaulada 11.08.2008 18:50

Объясните методы сортировки массивов( для идиотки)
 
Прочитала тысячу раз статью, погуглила, но код дают частичный. Меня интересует как именно нужно объявить переменные в случае сортировки выбором и пузырьковой. Авторы не объясняют новых переменных, все скомкано как-то=((

Вот как они описывают метод выбора:
min:=m[1];
t:=1;
FOR i:=1 to 10 do
if m[i]><m[t] then t:=j;
buf:=m[t];
m[t]:=m[i];
m[i]:=buf;
end;

Я НЕ ПОНИМАЮ что за переменная buf, какой ее тип! Нужно ли объявлять m[t] и что за переменная j?
На мой вариант, естественно, компилятор матюкается.


Program massivv;
var
mas: ARRAY[1..10] of real;
i: integer;
t: integer;
min: integer;
j: boolean;
buf: integer;
begin
FOR i:=1 to 10 do
begin
Writeln('Введите элемент последовательности N: ',i);
Readln(mas[i]);
end;
min:=mas[1];
t:=1;
FOR i:=1 to 10 do
if mas[i]><mas[t] then t:=j;
buf:=mas[t];
mas[t]:=mas[i];
mas[i]:=buf;
end;
end.

Хотелось бы также увидеть полную версию сортировки методом вставки и особенно пузырьковой. Если кто-то не полениться написать, буду очень благодарна, если есть ссылки-дайте пожалуйста:молись:

Borland 11.08.2008 20:11

Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
что за переменная buf, какой ее тип

Тип тот же самый, что у элемента массива (в данном случае real). И у min, кстати, тип тоже должен быть real.

Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
Нужно ли объявлять m[t]

Да, насколько я знаю паскаль.


Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
Хотелось бы также увидеть полную версию сортировки методом вставки и особенно пузырьковой

Insertion sort http://www.softpanorama.org/Algorithms/Sorting/insertion_sort.shtml
BubbleSort http://www.softpanorama.org/Algorithms/Sorting/bubblesort.shtml
Тут есть и другие методы http://www.softpanorama.org/Algorithms/sorting.shtml

Правда, всё на C, но понять можно. Знал бы Паскаль - переделки на пару минут...

Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
что за переменная j

Судя по комменту того исходника - index of the end of sorted region. Явно должна быть integer.

PSyton 12.08.2008 03:04

почитайте тут: http://algolist.manual.ru/sort/index.php

Nerey_ser 12.08.2008 21:35

В первом приведёном коде ни одного begin, но end есть. Неудивительно, что компилятор ругается.

CheshireCat 13.08.2008 00:27

Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
j: boolean;

Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
t:=j;

на сколько я помню, такое делать нельзя

j - boolean, т.е. True\False
t - он integer

buf - видимо сокращение от buffer - т.е. используется как переменная для временного хранения данного
Цитата:

Сообщение от Levilaulada (Сообщение 1580388)
buf:=mas[t];
mas[t]:=mas[i];
mas[i]:=buf;

mas на месте t идёт в buf
mas на месте i идёт в mas на месте t
то что оказалось в buf идёт в mas на месте i
______________
т.е. mas[t] и mas[i] меняются местами


Напиши подробнее что требуется сделать, что дано и т.п.

Levilaulada 13.08.2008 20:28

Всем спасибо, просветление наступило.Вот я сделала пузырьковым методом:
Program sortirov_puzirok;
var
m: array[1..5] of integer;
ind: boolean;
i: integer;
buf: integer;
begin
For i:=1 to 5 do
begin
Writeln('Введите число последовательности N: ',i);
Readln(m[i]);
end;
Repeat
ind:=true;
For i:=1 to 4 do
if m[i]>m[i+1] then
begin
buf:=m[i];
m[i]:=m[i+1];
m[i+1]:=buf;
ind:=false;
end;
until ind;
Writeln('Результат сортировки по возрастанию: ');
For i:=1 to 5 do
Writeln(m[i]);
end.
__________
с сортировкой выбором так ничего не получается=((уже все методы перепробовала, кроме правильного ^^.

CheshireCat 13.08.2008 23:41

Цитата:

Сортировка выбором

На этот раз при просмотре мaccива мы будем искать наименьший элемент, Сравнивая его с первым. Если такой элемент найден, поменяем его местами с первым. Затем повторим эту операцию, но начнем не с первого элемента, а со второго. И будем продолжать подобным образом, пока не рассортируем весь массив.
или тут:
http://ru.wikipedia.org/wiki/%D0%A1%...80%D0%BE%D0%BC

Цитата:

Шаги алгоритма:

1. находим минимальное значение в текущем списке
2. производим обмен этого значения со значением на первой позиции
3. теперь сортируем хвост списка, исключив из рассмотрения уже отсортированный первый элемент
Код:

for i := 1 to n - 1 do
begin
  min := i;
  for j := i + 1 to n do
    if a[min] > a[j] then
      min := j;
  t := a[i];
  a[i] := a[min];
  a[min] := t; 
end;

Цитата:

Program sortirov_vibor;
var
m: array[1..5] of integer;
i: integer;
j: integer;
min: integer;
begin
For i:=1 to 5 do
begin
Writeln('Введите число последовательности N: ',i);
Readln(m[i]);
end;

for i := 1 to 4 do
begin
min := i;
for j := i + 1 to 5 do
if m[min] > m[j] then
min := j;
t := m[i];
m[i] := m[min];
m[min] := t;
end;

Writeln('Результат сортировки по возрастанию: ');
For i:=1 to 5 do
Writeln(m[i], ' ');
end.
Представь что у тебя в ряд стоят девушки с разными сумочками... )))))
Ты смотришь на каждую по очереди и сравниваешь с оставшимися в ряду у кого самая красивая сумочка.
Если нашла, то меняешь их местами.

В первый заход на первом месте оказыается девушка с самой красивой сумочкой.
Во второй на втором оказывается менее красивая сумочка и так далее.....
В последний заход ты сравниваешь сумочки девушек на предпоследнем и последнем месте в ряду.

AlgualKi 14.08.2008 10:52

М-да, а как на сумочках сортировку вставкой объяснить? :) Пузырек мне понравился, мож так мне его студентам объяснять :)
Девушке совет - делайте отступы, а то ни фига не понятно.

CheshireCat 14.08.2008 17:36

AlgualKi, а ты на колечках или кофточках..
Отступы форум убирает. А так - обязательно. И закомментировать то что стало понятно!

Да, кстати, это был не пузырёк, а сортировка выбором.

Hubbitus 14.08.2008 18:02

Комментарий Модератора:
Чтобы форум никакие отступы не убирал надо код в тег [ CODE ] (пробелы убрать )заключать, а никак ни в тег цитаты!

Levilaulada 16.08.2008 10:30

CheshireCat, спасибо за забавные объяснения, смеялась долго)В целом я понимала алгоритм, а вот написать программу не удавалось. В коде нашла две ошибки, но все теперь работает!

AlqualKi, студентам желательно так не объяснять, иначе они будут умственно оболванены.

CheshireCat 16.08.2008 11:46

Levilaulada ну и отлично, пожалуйста.

Там дальше рекурсии пойдут, поинтеры всякие.. :)


Часовой пояс GMT +4, время: 01:11.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.