Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
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

Сортировка методом выбора делает меньше перестановок элементов и меньше сравнений.

Есть вариант двунаправленной сортировки выбором - ведётся поиск не только минимального но и максимального элементов.

11
432.186 GOLOS
На Golos с October 2016
Комментарии (3)
Сортировать по:
Сначала старые