Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
03.03.2016
Размер:
2.87 Mб
Скачать

«Школьный» алгоритм сортировки

Сортировка массива (ее также называют группировкой) заключается в такой перестановке элементов массива, при которой они будут расположены в заданном порядке – по возрастанию (группировка по возрастанию) или по убыванию (группировка по убыванию). В первом случае между элементами массива имеет место соотношение

;

во втором случае - соотношение

.

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

На начальном этапе изучения программирования, в частности в школьном курсе информатики программу сортировки одномерного массива обычно представляют в следующем виде:

for(i=0;i<n;i++) //Внешний цикл

for(j=0; j<n;j++) //Внутренний цикл

if(x[i]<x[j])

{ buf=x[i]; x[i]=x[j]; x[j]=buf;}

Это самая простая из возможных программ сортировки, однако одновременно следует отметить, что более худшего метода сортировки еще не придумано.

Недостатки школьного алгоритма сортировки:

1. Дважды проверяется каждая пара элементов (например, при ипроверяются элементыи; прии─ те же элементыи).

2. При производится ненужная проверка одного и того же элемента.

3. Алгоритм совершенно не учитывает исходное расположение элементов массива. Это означает, что время обработки массива, элементы которого уже были расположены по возрастанию, будет примерно таким же, как и в случае, когда элементы массива расположены в обратном порядке, т.е. по убыванию.

Избавиться от первых двух недостатков довольно легко. Для этого алгоритм сортировки запишем в следующем виде:

for(i=0;i<n-1;i++) //Внешний цикл

for(j=i+1; j<n;j++) //Внутренний цикл

if(x[i]>x[j])

{ buf=x[i]; x[i]=x[j]; x[j]=buf;}

Назовем этот вариант модифицированным школьным алгоритмом сортировки. Важно отметить, что в первом варианте осуществляется проверка x[i]<x[j], а во втором - x[i]>x[j].

Как будет в дальнейшем показано в сравнительной таблице методов группировки, в данном случае время обработки массива сокращается примерно в два раза.

Группировка массива методом прямой выборки

В рассмотренном ниже алгоритме последовательно выбирается минимальный элемент в подмассивах; в связи с этим данный метод группировки можно назвать также методом выделения минимального элемента.

Последовательность реализации алгоритма:

1) Просматриваем массив и определяем индекс минимального элемента. Если , то выполняем обмен элементови .

2) Просматриваем подмассив и определяем индекс минимального элемента. Если , то выполняем обмен элементови .

3) То же по отношению к подмассиву и т.д.

Последним подмассивом, подвергающимся просмотру, является подмассив .

for(i=0;i<n-1;i++) //Внешний цикл

{ imin=i; //i-й элемент принимаем за минимальный

for(j=i+1;j<n;j++)//Внутренний цикл поиск минимума if(x[imin]>x[j])

imin=j;

if (imin!=i)

{ //перестановка элементов

buf=x[i];

x[i]=x[imin];

x[imin]=buf;

}

}

Здесь внешний цикл - перебор подмассивов; внутренний - поиск минимального элемента в подмассиве. Количество выполнений внешнего и внутреннего циклов не зависит от исходной упорядоченности массива .

Примечание. Аналогичным образом можно реализовать метод прямой выборки путем выделения максимального элемента в последовательных подмассивах.

Соседние файлы в папке Прогр_обменка