Программирование на C и C++

Онлайн справочник программиста на C и C++

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

Аватар пользователя merkul40
пн, 08/14/2017 - 23:23 -- merkul40

Доброго всем времени суток!
Толковое объяснение, что это такое на wiki:
https://ru.wikipedia.org/wiki/Сортировка_пузырьком

Вот мой вариант кода:

#include <stdio.h>
#include <stdlib.h>

int Mass[1000];
int determination(void);
int buble_sort(void);
void printing(void);

int main()
{
       
        determination();
        buble_sort();
        printing();
       
        return 0;        
        }
       
int determination(void)// функция присвоения значений массиву
{
        for (int i = 0; i <= 999; i++)
        {
                Mass[i] = rand() % 3000;
                }
       
        }

int buble_sort(void)// функция упорядочения массива
{
        int tmp = 0;
        for (int i = 0; i <= 999; i++)
        {
                for (int j = 999; j > i; j--)
                {
                        if (Mass[j] < Mass[j - 1])      //
                        {
                               
                                tmp = Mass[j - 1];              //
                                Mass[j - 1] = Mass[j];  //
                                Mass[j] = tmp;                  //
                               
                                }
                        }
                }
       
        }
       
void printing(void)// функция вывода массива на экран
{
        for (int i = 0; i <= 999; i++)
        {
                printf("%d\t%d\n", i + 1, Mass[i]);
                }
        }
Программа разбита на функции.
Функция determination присваивает значения массива Mass[1000] используя функцию rand() (псевдослучайные числа от 0 до 3000).
Функция buble_sort - функция с применением сабжа. Начиная с 1000-го значения массива функция ищет минимальное значение и перемещает его "вверх" к 1-й ячейке массива.
С функцией printing все понятно.
Желаю удачи!

Комментарии

Аватар пользователя merkul40
Опубликовано пользователем merkul40

Я попробовал улучшить алгоритм: 1 поставил счетчик перестановок, 2 добавил флаг перестановок(если флаг показывает, что перестановок не было, значит зачем далее совершать проходы (на 1000 значений массива это сэкономило 1 проход)), 3 добавил переменную границы массива (после каждого прохода граница смещается на 1 вниз, выше границы обработки массива не происходит).
Эти улучшения дело конечно хорошее, но лучше стало буквально на чуть-чуть. Дикого прироста производительности я не ощутил.