КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Сортировка методом пузырька. Сортировка вставками
Begin Begin Begin Begin Begin Var Сортировка вставками
Алгоритм, в нескольких словах, таков. На «первом» шаге вообще ничего не делается. На втором шаге берётся второй элемент (A 2) и сравнивается с первым (A 1). Если второй элемент меньше первого, они обмениваются местами. Результат – два элемента упорядочены. На i -ом шаге (теперь i = 3, 4, 5, …, n) берётся i -ый элемент (Ai) и сравнивается с теми элементами Aj, что расположены слева от него: j = i - 1, j = i - 2, j = i - 3, и т.д. – так до тех пор, пока выполняется неравенство Ai < Aj. В последний раз, когда это неравенство будет выполнено, переменная j примет значение, равное новому месту для Ai – такому, куда нужно Ai вставить. Например, пусть i = 5, а первые 5 элементов массива таковы: 4, 3, 9, 11, 5. В последний раз Ai < Aj при j = 3. Следовательно, число 5 должно встать на третью позицию, подвинув числа 9, 11 вправо на 1 шаг. Результат – i элементов упорядочены.
Текст процедуры:
procedure InsertSort; i, j: int64; x: single; nMove:=0; nCompare:=0;
for i:= 2 to nCurr do x:= A[i]; Inc(nMove);
j:= i; while (j > 1) and (x < A[j - 1]) do // Попаданий в тело цикла будет на 1 меньше, // чем вычислений логического условия « (j > 1) and (x < A[j - 1])». Inc(nCompare); A[j]:= A[j - 1]; Inc(nMove, 2); Dec(j); end;
if j > 1 then // Сюда попали => при последнем j проверка «(x < A[j - 1])» была Inc(nMove); // Прверка условия «(x < A[j - 1])» требует одного перемещения Inc(nCompare); end;
if j <> i then A[j]:= x; Inc(nMove); end; end; end; Назначение переменных: nCurr – текущее количество элементов в массиве, nMove – найденное количество перемещений. nCompare – найденное количество сравнений. Количество сравнений (nCompare):
Количество переносов (nMove):
На первом шаге проверяются все пары соседних элементов массива, начиная с последней. Если пара «неправильная» (левый элемент больше правого), производится обмен значениями в паре. Наименьший из всех элементов массива, если только он не стоял на первом месте, «просочится» в результате первого шага на первую позицию, поскольку он будет «неправильно» расположен относительно каждого из своих соседей слева. На втором шаге свое законное место (второе слева) занимает наименьший из оставшихся элементов массива. И т.д. Текст процедуры: procedure BubbleSort;
Дата добавления: 2014-01-06; Просмотров: 286; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |