Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Сортировка методом прямого обмена




Классификация методов сортировки редко бывает осмысленной. Оба разбиравшихся до этого метода можно тоже рассматривать как «обменные» сортировки. Однако в данном разделе мы рассмотрим метод, где обмен местами двух элементов представляет собой характернейшую особенность процесса.

Изложенный ниже алгоритм прямого обмена основывается на сравнении и смене мест для пары соседних элементов и продолжении этого процесса до тех пор, пока не будут упорядочены все элементы (рисунок 21).

 

Метод сортировки Пример [программа pr_18]
for(i=0; i<N; i++) { for(j=N-1; j>i; j--) if(a[j-1]>a[j]) { vsp = a[j]; a[j] = a[j-1]; a[j-1] = vsp; } } Рисунок 22. Пример сортировки методом прямого обмена

 

Как и в упоминавшемся методе прямого выбора, мы повторяем проходы по массиву, сдвигая каждый раз наименьший элемент оставшейся последовательности к левому концу массива. Если мы будем рассматривать массивы как вертикальные, а не горизонтальные построения, то элементы можно интерпретировать как пузырьки в чане с водой, причем вес каждого соответствует его ключу. В этом случае при каждом проходе один пузырек как бы поднимается до уровня, соответствующего его весу. Такой метод широко известен под именем пузырьковая сортировка.

 

 

Лекция № 10

 

Написал Lekka
07.11.2008
Директивы препроцессора В интегрированную среду подготовки программ на Си или в компилятор языка как обязательный компонент входит препроцессор. Назначение препроцессора – обработка исходного текста программы до ее компиляции. Стадии препроцессорной обработки выполняются последовательно. Для управления препроцессорном используются команды препроцессора, каждая из которых помещается на отдельной строке и начинается с символа #. Обобщенный формат директивы препроцессора: #имя_директивы лексемы_препроцессора Перед символом # и после него в директиве разрешены пробелы. Определены следующие препроцессорные директивы: #define – определение макроса или препроцессорного идентификатора; #include – включение текста из файла; #undef – отмена определения макроса или идентификатора; #if – проверка условия-выражения; #ifdef – проверка определенности идентификатора; #ifndef – проверка неопределенности идентификатора; #else – начало альтернативной ветви для #if; #endif – окончание условной директивы #if; #elif – составная директива #else#if; #line – смена номера следующей ниже строки; #error – формирование текста сообщения об ошибке трансляции; #pragma – действия, предусмотренные реализацией; # - пустая директива. Наиболее часто используются 2 директивы: #include и #define. Директива #include подключает стандартные библиотеки или файлы, реализованные самим программистом, для включения в программу текста из данных файлов. Директиву #define можно использовать 2 способами: для задания правила замены в тексте и как определение некоторого макроса.   Пример [программа pr_19]:
До препроцессорной обработки текста После препроцессорной обработки текста
1. Способ использования #include <stdio.h> #define N 10 main() { int array[N], i; for(i=0;i<N;i++) scanf(“%d”, &mas[i]); … return 0; }   main() { int array[10], i; for(i=0;i<10;i++) scanf(“%d”, &mas[i]); … return 0; }
2. Способ использования #include<stdio.h> #define min(a, b) (a<b)? a:b main() { int x, y; … printf("min = %d ", min(x,y)); return 0; }   main() { int x, y; … printf("min = %d ", (x<y)? x:y); return 0; }



Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 427; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.