Преобразование матрицы в одномерный массив, пересылка одномерного массива в матрицу.



Сортировка одномерного массива методом пузырьков.

Сейчас мы поговорим о сортировки массива так называемым методом "пузырька". По другому этот метод называется методом перестановок или методом обмена. Почему метод известен как метод "пузырька", да просто потому, что при его реализации более "легкие" элементы как бы всплывают вверх. Соответственно, более тяжелые "идут ко дну", один человек, обладающий видимо хорошим чувством юмора, заметил, что по всей видимости, пессимисты называют метод пузырька методом "утопленника".

Итак, представим, что у нас есть целочисленный массив из 10 элементов и нам его необходимо отсортировать по возрастанию.

Вот код программы на Паскале:

{ сортировка массива "пузырьком" по возрастанию }

const

n = 10; { количество элементов в массиве }

var

a:array[1..n] of integer;

i,j,buf:integer;

begin

{Заполняем массив случайными целыми числами из диапазона от 0 до 9 и выводим массив на экран}

for i:=1 to n do

begin

a[i]:=random(10);

write(a[i],' ');                

end;   

for i:=1 to n-1 do

for j:=i+1 to n do {В этой строке начинающие программисты чаcто допускают ошибку}

if a[i]>a[j] then

   begin

     buf:=a[i];

     a[i]:=a[j];

     a[j]:=buf;

   end;

writeln;

writeln('Массив после сортировки пузырьковым методом: ');

for i:=1 to n do

write(a[i],' ');

end.

Пояснения. Как видно из текста программы на Паскале, при сортировке массива методом пузырька, сравниваются два соседних элемента массива. В том случае, если элемент массива с номером i оказывается больше элемента массива с номером i+1, происходит обмен значениями при помощи вспомогательной переменной buf (переменной я дал название со смысловой нагрузкой, от слова "буфер").

Сортировка одномерного массива методом выбора.

Сортировка массива методом прямого выбора

Под сортировкой массива подразумевается процесс перестановки элементов

массива, целью которого является размещение элементов массива в опреде-

ленном порядке. Например, если имеется массив целых чисел а, то после

выполнения сортировки по возрастанию должно выполняться условие:

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

a[l] S а[2] < . . .& a[SIZE]

где SIZE — верхняя граница индекса массива.

Примечание:

Задача сортировки распространена в информационных системах и используется как предварительный этап задачи поиска, т. к. поиск в упорядоченном (отсортированном) массиве проводится намного быстрее, чем в неупорядоченном (см. метод бинарного поиска).

 

 Существует много методов (алгоритмов) сортировки массивов.

Рассмотрим два из них:

метод прямого выбора;

метод прямого обмена.

Сортировка методом прямого выбора

 

 Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:

Просматривая массив от первого элемента, найти минимальный эле мент и поместить его на место первого элемента, а первый — на место            минимального.    

Просматривая массив от второго элемента, найти минимальный элемент  и поместить его на место второго элемента, а второй — на место мини мального.        

И так далее до предпоследнего элемента.

Ниже представлена программа сортировки массива целых чисел по возрас танию, диалоговое окно которой изображено на рис. 5.15.

Процедура сортировки, текст которой приведен в листинге 5.9, запускается нажатием кнопки Сортировка (Buttoni). Значения элементов массива вводятся из ячеек компонента stringGridj. После выполнения очередного цикла поиска минимального элемента в части массива процедура выводит массив в поле метки (Label2).

Листинг 5.9. Сортировка массива простым выбором

procedure TForml.ButtonlClicktSender: TObject) ;

const

SIZE=10;

var

Массивы 169

a:array[l..SIZE] of integer;

min:integer; ( номер минимального элемента в части

массива от i до верхней границы массива )

j:integer; / номер элемента, сравнив аемого с минимальным j

buf:integer; С буфер, используемый при обмене элементов массива. J

i,k:integer;

begin

// ввод массива

for i:=l to SIZE do

a[i]:=StrToInt(StringGEidl.Cells[i-l,G]);

Iabel2.caption: = ";

for i:=l to SIZE-1 do

begin

{поиск минимального элемента

в части массива от all] до a[SIZE]}

min:=1;

for j:=i+l to SIZE do

if a[j] < a[min]

then iriin : =j ;

{ поменяем местами afjninj и a/ij }

buf:=ali];

a[i] :=a[min] ;

a[min) :=buf ;

f вывод массива J

for k:=l to SIZE do

Label2 . caption :=labe 12 . caption+' ' -tlntTostr la [k] ) ;

Label2, caption: =labe!2.capt ion+113;

end;

Label2.caption:=label2.captiQn+ttl3+'MaccMB отсортирован. ' ;

end;


Дата добавления: 2018-05-12; просмотров: 626; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!