Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

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

   Метод пузырька

В простонародие метод пузырька так же называют «Пузырьковой сортировкой». Ну, суть сортировки методом пузырька вытекает из названия. Мы находим минимальный элемент (пузырек) в массиве и выставляем его первым элементом нашего массива (поднимаем на поверхность). Далее находим следующий минимальный элемент и так же его выставляем вслед за первым элементом. И так мы будет действовать до самого конца.

Короче суть такова: минимальные элементы поочередно всплывают. А теперь давайте рассмотрим различные реализации данной сортировки. Дело в том, что в зависимости от среды разработки возможно использование слегка других операторов, да и могут использоваться различные директивы препроцессора. Пользовательская функция, которая меняет значения элементов, находится тут: swap.

   Метод пузырька в среде TurboC

#include <iostream.h>
#include <conio.h>

int main(int argc, char* argv[])
{
    int arr[8] = {35, 698, 74, 81, 67, 11, 184, 89},i, flag;

    for (; ;){
       flag = 0;
       for (i = 7; i>0; i--){
          if (arr[i] < arr[i-1]) {
             /* Обмен значениями смежных элементов */
             swap (arr[i],arr[i-1]);
             flag++;
          }
       }
       /* Если массив упорядочен, то обмена не происходит и
       мы выходим из цикла */
       if (flag == 0) break;
    }
    getch(); // служит просто для задержки экрана
return 0;
}

Результат работы метода пузырька не зависит от среды разработки. Но числа в каждой среде подставлю разные, для наглядности:

11 35 698 74 81 67 89 184
11 35 67 698 74 81 89 184
11 35 67 74 698 81 89 184
11 35 67 74 81 698 89 184
11 35 67 74 81 89 698 184
11 35 67 74 81 89 184 698

   Метод пузырька в среде Visual Studio (C++)

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
   int arr[6] = {35, 8, 74, 1, 67, 7},i, flag;
   for (; ;){
      flag = 0;
      for (i = 5; i>0; i--){
         if (arr[i] < arr[i-1]) {
            swap (arr[i],arr[i-1]);
            flag++;
         }
      }
      if (flag == 0)
         break;
      }
   return 0;
}

Давайте посмотрим на ход выполнения:

35 8 74 1 67 7
1 35 8 74 7 67
1 7 35 8 74 67
1 7 8 35 67 74

   Метод пузырька в среде C++ Builder 6

#include <vcl.h>
#include <iostream.h>
#include <conio.h>

// директивы - это сила
#define MAX 4

int main()
{
     int arr[MAX] = {4, 9, 1, 3},i, flag;
     for (; ;){
        flag = 0;
        for (i = MAX-1; i>0; i--){
           if (arr[i] < arr[i-1]) {
              swap (arr[i],arr[i-1]);
              flag++;
           }
        }
        /* если не произошло обмена - сортирока завершена */
        if (flag == 0)
           break;
        /* выводим промежуточную сортировку */
        for ( i=0;i <MAX;i++) {
           cout << arr[i] << ' ';
        }
        cout << '\n';
     }
     getch();
return 0;
}

Ход выполнения сортировки:

4 9 1 3
1 4 9 3
1 3 4 9

В последнем примере я использовал директиву препроцессора define, которая во многом облегчает выполнение сортировки. А о некоторых директивах include Вы можете прочесть в разделе Уроки на Си.

При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru