sergiy
6 лет назад24 FreeBasic - сортировка, метод выбора
Сортировка методом выбора
В массиве находят минимальный элемент и он переставляется на первое место. Например, если нашли что a(5) наименьший, то a(1) и a(5) меняются местами. Далее ведётся поиск маименьего в оставшейся часть массива, начиная с a(2) и опять меняется с найденным и т.д. до конца массива.
dim as integer a(10)
dim as integer i, min, j
for i=1 to 10
a(i)=int(rnd()*99+1)
next i
for i=1 to 10-1
min=i
for j=i+1 to 10
if a(j)< a(min) then min=j
next j
if min<> i then swap a(i),a(min)
next i
sleep
добавим процедуру которая будет выводить массив и отмечать другим цветом элементы которые необходимо переставить
sub prnta(byval t1 as integer, byval t2 as integer)
dim as integer i
for i=1 to 10
if i=t1 or i=t2 then color 12 else color 15
print a(i);
next i
print
end sub
const as integer N=15
dim shared as integer a(N)
dim as integer i, min, j
sub prnta(byval t1 as integer, byval t2 as integer)
dim as integer i
for i=1 to N
if i=t1 or i=t2 then color 12 else color 15
print a(i);
next i
print
end sub
for i=1 to N
a(i)=int(rnd()*99+1)
next i
for i=1 to N-1
min=i
for j=i+1 to N
if a(j)< a(min) then min=j
next j
if min<> i then prnta(i,min):swap a(i),a(min)
next i
prnta(0,0)
sleep
Сортировка методом выбора делает меньше перестановок элементов и меньше сравнений.
Есть вариант двунаправленной сортировки выбором - ведётся поиск не только минимального но и максимального элементов.