
- •1.Этапы подготовки и решения задач на эвм.
- •1. Введение
- •2. Постановка задачи
- •3. Математическое описание задачи
- •4. Выбор и обоснование метода
- •5. Алгоритмизация вычислительного процесса
- •6. Составление программы
- •7. Отладка программы
- •8. Решение задачи на эвм и анализ результатов
- •2. Понятие подпрограммы, модуля и функции.
- •Условный оператор if
- •If (условие) оператор_1; else оператор_2;
- •If (условие) { оператор_1; оператор_2; … }
- •Оператор варианта switch
- •Цикл for
- •Цикл while
- •Цикл do while
- •Структурный тип данных – массив
- •Одномерные и двумерные массивы
- •Функция
- •Комбинированный тип данных – запись.
- •Работа с файлами
- •Указатели. Динамические переменные. Их использование
- •Применение связынных списков , очередей . И.Т.Д Очереди, стеки, связанные списки и деревья
- •Итеративные алгоритмы..
- •Невычислительные задачи
- •Последовательный поиск
- •Бинарный поиск
- •Метод поиска по бинарному дереву Теория
- •Вставка и удаление
- •Метод интерполяционного поиска Интерполяционный поиск
- •Метод поиска по бору . Алгоритм и его реализация
- •Добавление новой строки в бор:
- •Поиск строки в боре:
- •Реализация:
- •Методы хранения бора:
- •Сортировка простым выбором
- •Сортировка методом простой вставки
- •Метод сортировки бинарной вставкой
- •Метод сортировки стандартным обменом Стандартный обмен
- •Шейкерная сортировка
- •Метод сортировки Шелла.
Метод сортировки бинарной вставкой
Бинарные вставки
{сортировка бинарными вставками}
for i:=2 to n do
begin
r:=i;
l:=i;
while (l<r);
begin
k:=(l+r) div 2;
if a[k]>a[i] then l:=k+1;
else r:=k;
end;
k:=r;
x:=a[i];
for m:=i downto k+1 do
a[m]:=a[m-1];
a[k]:=x;
end;
Для ускорения числа сравнений при поиске места, в которое нужно вставить элемент X, можно использовать логарифмический поиск. Это означает, что сначала Х сравнивается с элементом k[j/2], затем, в зависимости от результата сравнения, с элементом, лежащим посередине между 1 и j/2 или посередине между j/2+1 и j и т.д. . При этом число сравнений для каждого j равно примерно log(j). Число пересылок элементов при этом не изменяется и остается примерно равным N/4. Время работы алгоритма t примерно оценивается формулой: t=a*N + b*N + c*N*logN, где a,b,c - неизвестные константы, зависящие от программной реализации алгоритма, log - логарифм по основанию 2.
Метод сортировки стандартным обменом Стандартный обмен
Метод стандартного обмена еще называется "Методом Пузырька". В этом методе d=1, т.е. сравниваются рядом стоящие элементы. При первом проходе алгоритм последовательно сравнивает по два элемента и меняет их местами в зависимости от условия сортировки. При этом на последнем месте оказывается самый максимальный (минимальный) элемент. На втором шаге алгоритм сравнивает первые N-1 элементов в ставит предпоследним самый большой. При каждом последующем шаге интервал уменьшается на единицу.
Давайте рассмотрим пример:
Дано множество
{8,3,4,2,5}
1. {3,8,4,2,5} - сравниваются 8 и 3, переставляются т.к. 8>3
2. {3,4,8,2,5} - сравниваем 8 и 4, также переставляем.
3. {3,4,2,8,5}
4. {3,4,2,5,8}
В результате этого первого шага элемент весом в 8, переместился в конец. Далее он не рассматривается и операция сортировки производится с множеством {3,4,2,5}.
В результате всех шагов у нас образуется отсортированное по возрастанию множество {2,3,4,5,8}.
А теперь программная реализация этого алгоритма.
#include <stdio.h>
#include <stdlib.h>
int BubbleSort(int *array,int len)
{
int i,j,c;
int k=0;
for (i=len;i>1;i--)
{
k=0;
for (j=1;j<i;j++)
if (array[j]<array[j-1])
{
c=array[j];
array[j]=array[j-1];
array[j-1]=c;
k=1;
};
if (k==0) return 0;
};
};
int main()
{
int k[6]={8,-5,1,7,3,-10};
for (int i=0; i<6;i++)
printf(" %d ",k[i]);
printf("\n");
BubbleSort(k,5);
for (i=0; i<6;i++)
printf(" %d ",k[i]);
printf("\n");
return 0;
};
Процедура BubbleSort() сортирует len первых элементов в массиве array.
Результат выполнения программы:
8 -5 1 7 3 -10
-5 1 3 7 8 -10
Наверно, Вы заметили, что элемент -10 не отсортировался. Это потому, что в сортировке участвовало 5 элементов.