русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Сортировка методом пузырька


Дата добавления: 2015-06-12; просмотров: 735; Нарушение авторских прав


Суть алгоритма такова. Если пройдёмся по любому массиву установив правильный порядок в каждой паре соседних элементов, то после того прохода на последнем месте массива гарантированно будет стоять нужный элемент (самый большой для сортировки по возрастанию или самый маленький для сортировки по убыванию). Если ещё раз пройтись по массиву с такими же преобразованиями, то и на предпоследнем месте гарантированно окажется нужный элемент. И так далее.

Пример:

2 9 1 4 3 5 2 → порядок правильный, не будет перестановки

2 9 1 4 3 5 2 → 2 1 9 4 3 5 2

2 1 9 4 3 5 2 → 2 1 4 9 3 5 2

2 1 4 9 3 5 2 → 2 1 4 3 9 5 2

2 1 4 3 9 5 2 → 2 1 4 3 5 9 2

2 1 4 3 5 9 2 → 2 1 4 3 5 2 9

Код:

/* Внешний цикл постоянно сужает фрагмент массива,
* который будет рассматриваться, ведь после каждого прохода
* внутреннего цикла на последнем месте фрагмента будет
* оказываться нужный элемент (его не надо рассматривать снова).
*/
for (int i = a.length - 1; i >= 2; i--) {
/* В переменной sorted мы будем хранить признак того,
* отсортирован ли массив. Перед каждым проходом внутреннего
* цкла будем предполагать, что отсортирован, но если совершим
* хоть одну перестановку, то значит ещё не конца отсортирован.
* Этот приём, упрощающий сортировку, называется критерием Айверсона.
*/
boolean sorted = true;
/* Во внутреннем цикле мы проходимся по фрагменту массива, который
* определяется внешним циклом. В этом фрагменте мы устанавливаем
* правильный порядок между соседними элементами, так попарно
* обрабатывая весь фрагмент.
*/
for (int j = 0; j < i; j++) {
/* Если порядок соседних элементов не правильный, то их
* надо обменять местами. И запомнить, что была перестановка.
*/
if (a[j] > a[j+1]) {
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
sorted = false;
}
}
/* Если массив отсортирован (т.е. не было ни одной перестановки
* во внутреннем цикле, значит можно прекращать работу внешнего
* цикла.
*/
if(sorted) {
break;
}
}





<== предыдущая лекция | следующая лекция ==>
Сортировка выбором | Многомерные массивы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

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