Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПИЭИНФОРМАТИКА.doc
Скачиваний:
3
Добавлен:
22.11.2019
Размер:
984.58 Кб
Скачать

Алгоритмы сортировки одномерных массивов

1. Сортировка одномерных массивов

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

1.1. Метод пузырька (метод обменной сортировкой с выбором)

Идея метода отражена в его названии. Шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то они меняются местами. При этом самые «легкие» (наименьшие) элементы массива «всплывают» наверх, а самые «тяжелые» – «тонут». Алгоритмически это можно реализовать следующим образом. Весь массив просматривается снизу вверх, стоящие рядом элементы меняются в том случае, если «нижний» элемент меньше, чем «верхний». Таким образом, наверх «всплывет» самый «легкий» элемент всего массива. Так нужно повторять для оставшихся неотсортированными 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;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]