Метод пузырька (метод обменной сортировкой с выбором)
Идея метода отражена в его названии. Шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то они меняются местами. При этом самые «легкие» (наименьшие) элементы массива «всплывают» наверх, а самые «тяжелые» – «тонут». Алгоритмически это можно реализовать следующим образом. Весь массив просматривается снизу вверх, стоящие рядом элементы меняются в том случае, если «нижний» элемент меньше, чем «верхний». Таким образом, наверх «всплывет» самый «легкий» элемент всего массива. Так нужно повторять для оставшихся неотсортированными N-1 элементов (т.е. для тех, которые лежат «ниже» первого) и т.д. Алгоритм достаточно прост:
Алгоритм (в порядке возрастания) | Программа |
объявление вещ: t[10], x, цел: i, j, k, flag для i=0 до 10-1 шаг 1 ввод t[i] все_для i для i=10-1 до 1 шаг -1 //обмена не было flag=0 для j=0 до i-1 шаг 1 если t[j]>t[j+1] //меняем местами два соседних //элемента x=t[j] t[j]=t[j+1] t[j+1]=x //обмен состоялся flag=1 все_если все_для j если flag==0 выход из цикла по i // не было // обмена все_если все_для i для i=0 до 10-1 шаг 1 вывод t[i] все_для i | #include "stdio.h" #include "math.h" #define N 10 int main ( ) { float t[N], x; int i, j, k, flag; // ввод массива t с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("x[%i]= " ,i ); scanf ("%f", &t[i]); } for ( i=N-1; i>=1; i-- ) { //обмена не было flag=0; for ( j=0; j<=i-1; j++ ) { if (t[j]>t[j+1]) { // элементы меняются // местами x=t[j]; t[j]=t[j+1]; t[j+1]=x; //обмен состоялся flag=1; } } if(flag= =0) //если обмена не было, то нужно //выйти из цикла break; } // вывод массива t на экран for (i=0; i<=N-1; i++) printf ("%.3f ", t[i]); printf ("\n"); return 1; } |
Дата добавления: 2015-08-08; просмотров: 645;