Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

123 / PDF / Сортировка прямым выбором

.doc
Скачиваний:
13
Добавлен:
10.06.2015
Размер:
68.1 Кб
Скачать

2. Сортировка прямым выбором

Этот метод основан на следующем алгоритме.

1. Выбирается элемент с наименьшим ключом.

2. Он меняется местами с первым элементом а1.

3. Эти операции затем повторяются с оставшимися n—1 элементами, затем с n — 2 элементами, пока не останется только один элемент — наибольший.

Этот метод продемонстрирован на тех же восьми ключах в табл. 2.

Таблица 2.2. Пример сортировки простым выбором

Начальные ключи

i=2

i=3

i=4

i=5

i=6

i=7

i=8

44 55 12 42 94 18 06 67

06 55 12 42 94 18 44 67

06 12 55 42 94 18 44 67

06 12 18 42 94 55 44 67

06 12 18 42 94 55 44 67

06 12 18 42 44 55 94 67

06 12 18 42 44 55 94 67

06 12 18 42 44 55 67 94

Программу можно представить следующим образом:

for i := 1 to п — 1 do

begin «присвоить k индекс наименьшего элемента из а[i]...

... а[п;

«поменять местами al и ak end

Этот метод, называемый сортировкой прямым выбором, в некотором смысле противоположен сортировке простыми включениями; при сортировке простыми включениями на каждом шаге рассматривается только один очередной элемент входной последовательности и все элементы готового массива для нахождения места включения; при сортировке простым выбором рассматриваются все элементы входного массива для нахождения элемента с наименьшим ключом, и этот один очередной элемент отправляется в готовую последовательность. Весь алгоритм сортировки простым выбором представлен в виде программы 2.3.

procedure straightselection;

var i,j,k: index; x: item; begin for i : = 1 to n–1 do begin k := i; x := a[i];

for j := i+l to n do

if a[j] .key < x .key then begin A: := j; x := a[j] end ;

a[k] := a[i]; a[i] := x; end end

Исходный массив

0,57

-0,11

0,27

0,48

0,05

-24,00

0,09

1,46

-0,39

-1,00

23

45

Этапы сортировки

0,57

-0,11

0,27

0,48

0,05

-24

0,09

1,46

-0,39

-1,00

23

45

-24

-0,11

0,27

0,48

0,05

0,57

0,09

1,46

-0,39

-1,00

23

45

-24

-1,00

0,27

0,48

0,05

0,57

0,09

1,46

-0,39

-0,11

23

45

-24

-1,00

-0,39

0,48

0,05

0,57

0,09

1,46

0,27

-0,11

23

45

-24

-1,00

-0,39

-0,11

0,05

0,57

0,09

1,46

0,27

0,48

23

45

-24

-1,00

-0,39

-0,11

0,05

0,57

0,09

1,46

0,27

0,48

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,57

1,46

0,27

0,48

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,27

1,46

0,57

0,48

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,27

0,48

0,57

1,46

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,27

0,48

0,57

1,46

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,27

0,48

0,57

1,46

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,27

0,48

0,57

1,46

23

45

-24

-1,00

-0,39

-0,11

0,05

0,09

0,27

0,48

0,57

1,46

23

45

Код, реализующий сортировку прямым выбором

Sub Sort_min_прямой_выбор1()

'сортировка по возрастанию элементов массива помощью

'прямого выбора

'Nk - кол-во перестановок

Dim a!(1 To 25), i%, n%, j%, s!, s1!, k%, Nk%

n = 1 ' размерность массива определяется путем

'считывания данных из таблицы

While Cells(2, n) <> ""

a(n) = Cells(2, n)

n = n + 1

Wend

n = n - 1

' проверка считанных данных

'For i = 1 To n

'Cells(3, i) = a(i)

'Next i

' сортировка эл-тов массива по убыванию

For i = 1 To n - 1

s = a(i): k = i

For j = i + 1 To n

If s > a(j) Then

k = j

s = a(k)

End If

Next j

a(k) = a(i)

a(i) = s

' вывод этапов сортировки

'For j = 1 To n

' Cells(16, j) = a(j)

' Cells(16, j).NumberFormat = "0.00"

'Next j

Next i

'Cells(4, i) = a(i)

'Cells(4, i).Font.Italic = True 'оформление ячеек вывода

'Cells(4, i).Font.Bold = True ' стилем

'Cells(4, i).Font.Color = RGB(45, 255, 123)

'Cells(4, i).NumberFormat = "0.00"

'Nk = Nk + 1

For j = 1 To n

Cells(4, j) = a(j)

Cells(4, j).Font.Italic = True 'оформление ячеек вывода

Cells(4, j).Font.Bold = True ' стилем

Cells(4, j).Font.Color = RGB(45, 255, 123)

Cells(4, j).NumberFormat = "0.00"

Next j

End Sub

Sub CommandButton1_Click()

Sort_min_прямой_выбор1

End Sub

Анализ метода прямого включения.

Число сравнений ключей (Сi) при i-м просеивании самое большее равно i –1, самое меньшее – 1. если предположить, что все перестановки из n ключей равновероятны, то среде число сравнений равно – i/2. Число же пересылок (присвоения элемементов0 Mi = Сi +2 (включая барьер). Общее сило сравнений и пересылок:

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

Соседние файлы в папке PDF