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

Аватар пользователя 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 вниз, выше границы обработки массива не происходит).
Эти улучшения дело конечно хорошее, но лучше стало буквально на чуть-чуть. Дикого прироста производительности я не ощутил.