Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_LR3.docx
Скачиваний:
25
Добавлен:
18.02.2018
Размер:
33.74 Кб
Скачать

1.Алгоритм "Сортировка выбором".

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

//Сортировка выбором {---

Функция СортировкаВыбором(Знач Массив)

Мин = 0;

Для i = 0 По Массив.ВГраница() Цикл

Мин = i;

Для j = i + 1 ПО Массив.ВГраница() Цикл //Ищем минимальный элемент в массиве

Если Массив[j] < Массив[Мин] Тогда

Мин = j;

КонецЕсли;

КонецЦикла; 

Если Массив [Мин] = Массив [i] Тогда //Если мин. элемент массива = первому элементу неотс. части массива, то пропускаем.

Продолжить;

КонецЕсли;

Смена = Массив[i]; //Производим замену элементов массива.

Массив[i] = Массив[Мин];

Массив[Мин] = Смена;

КонецЦикла;

Возврат Массив;

КонецФункции

2.Алгоритм "Сортировка пузырьком".

Алгоритм: 1.  Каждый элемент массива сравнивается с последующим и если элемент[i] > элемент[i+1] происходит замена. Таким образом самые "легкие" элементы "всплывают" - перемещаются к началу списка,а  самые тяжелые "тонут" - перемещаются к концу. 2.  Повторяем Шаг 1 n-1 раз, где n - Массив.Количество ().

//Сортировка пузырьком {---

Функция СортировкаПузырьком(Знач Массив)

Для i = 0 По Массив.ВГраница() Цикл

Для j = 0 ПО Массив.Вграница() - i - 1 Цикл

Если Массив[j] > Массив[j + 1] Тогда

Замена = Массив[j];

Массив[j] = Массив[j + 1];

Массив[j + 1] = Замена;

КонецЕсли;

КонецЦикла;

КонецЦикла;

Возврат Массив;

КонецФункции

//---}

3.Алгоритм "Шейкерная сортировка"

Алгоритм такой же, что и у пузырьковой сортировки + добавляется цикл пробега сверху-вниз.

В приведенном ниже примере, есть усовершенствование в шейкерной сортировке. В отличие от классической, используется в 2 раза меньше итераций.

//Сортировка перемешивание (Шейкер-Сортировка) {---

Функция СортировкаПеремешиванием(Знач Массив)

Для i = 0 ПО Массив.ВГраница()/2 Цикл

нИтер = 0;

конИтер = Массив.ВГраница();

Пока нИтер Массив[нИтер+1] Тогда

Замена = Массив[нИтер];

Массив[нИтер] = Массив[нИтер + 1];

Массив[нИтер + 1] = Замена;

КонецЕсли;

нИтер = нИтер + 1;//Двигаем позицию на шаг вперед

//Проходим с конца

Если Массив[конИтер - 1] > Массив[конИтер] Тогда

Замена = Массив[конИтер - 1];

Массив[конИтер-1] = Массив[конИтер];

Массив[конИтер] = Замена;

КонецЕсли;

конИтер = конИтер - 1;//Двигаем позицию на шаг назад

КонецЦикла;

КонецЦикла;  

Возврат Массив;

КонецФункции

//---}

4. Алгоритм "Сортировка вставками".

Смысл заключается в том, что на каждом шаге мы берем элемент, ищем для него позицию и вставляем в нужное место. Элементарный пример: При игре в дурака, вы тянете из колоды карту и вставляете ее в соответствующее место по возрастанию в имеющихся у вас картах. Или в магазине вам дали сдачу 550 рублей- одна купюра 500, другая 50. Заглядываете в кошелек, а там купюры достоинством 10,100,1000. Вы вставляете купюру достоинсвом 50р. между купюрами достоинством 10р и 100р, а купюру в 500 рублей между купюрами 100р и 1000р. Получается 10,50,100,500,1000 - Вот вам и алгоритм "Сортировка вставками". Таким образом с каждым шагом алгоритма, вам необходимо отсортировать подмассив данных и вставить значение в нужное место.

//Сортировка вставками {---

Функция СортировкаВставками(Знач Массив)

Для i = 0 По Массив.ВГраница()-1 Цикл

Ключ = i + 1;

Замена = Массив[Ключ];

j = i + 1;

Пока j > 0 И Замена < Массив[j - 1] Цикл

Массив[j] = Массив[j - 1];

Замена = j - 1;

Ключ = j - 1;

j = j - 1;

КонецЦикла;

Массив[Ключ] = Замена;

КонецЦикла;

Возврат Массив;

КонецФункции

//---}

5. Бинарный поиск

  • Подготовка. Перед началом поиска устанавливаем левую и правую границы массива:

left = 0, right = 19

  • Шаг 1. Ищем индекс середины массива (округляем в меньшую сторону):

mid = (19+0)/2=9

Сравниваем значение по этому индексу с искомым:

69 < 82

Сдвигаем левую границу:

left = mid = 9

  • Шаг 2. Ищем индекс середины массива (округляем в меньшую сторону):

mid = (9+19)/2=14

Сравниваем значение по этому индексу с искомым:

84 > 82

Сдвигаем правую границу:

right = mid = 14

  • Шаг 3. Ищем индекс середины массива (округляем в меньшую сторону):

mid = (9+14)/2=11

Сравниваем значение по этому индексу с искомым:

78 < 82

Сдвигаем левую границу:

left = mid = 11

  • Шаг 4. Ищем индекс середины массива (округляем в меньшую сторону):

mid = (11+14)/2=12

Сравниваем значение по этому индексу с искомым:

80 < 82

Сдвигаем левую границу:

left = mid = 12

  • Шаг 5. Ищем индекс середины массива (округляем в меньшую сторону):

mid = (12+14)/2=13

Сравниваем значение по этому индексу с искомым:

82 = 82

Решение найдено!

  Чтобы уменьшить количество шагов поиска можно сразу смещать границы поиска на элемент, следующий за серединой отрезка:

left = mid + 1 right = mid - 1

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]