Смекни!
smekni.com

Методы сортировки массивов (стр. 3 из 4)

WHILE a[i] <= x DO i := i + 1 END;

WHILE x <= a[i] DO j := j – 1 END

В этом случае x не работает как барьер для двух просмотров. В результате просмотры массива со всеми идентичными ключами приведут к переходу через границы массива.

Наша цель – не только провести разделение на части исходного массива элементов, но и отсортировать его. Будем применять процесс разделения к получившимся двум частям, до тех пор, пока каждая из частей не будет состоять из одного-единственного элемента. Эти действия описываются в программе 2.8.

ПРОГРАММА 2.8. QUICKSORT.

PROGRAM QS;

VAR

N,I:INTEGER;

A:ARRAY[0..50] OF INTEGER;

PROCEDURE SORT(L,R: INTEGER);

VAR

I,J,X,W: INTEGER;

BEGIN

I:=L;

J:=R;

X:=A[(L+R) DIV 2];

REPEAT

WHILE A[I]<X DO INC(I);

WHILE X<A[J] DO DEC(J);

IF I<=J THEN

BEGIN

W:=A[I];

A[I]:=A[J];

A[J]:=W;

INC(I);

DEC(J);

END;

UNTIL I>J;

IF L<J THEN SORT(L,J);

IF I<R THEN SORT(I,R);

END;

BEGIN

WRITELN('Введи длину массива');

READ(N);

WRITELN('Введи массив');

FOR I:=1 TO N DO READ(A[I]);

SORT(1, N);

WRITELN('Результат:');

FOR I:=1 TO N DO

WRITE(A[I],' ')

END.

Анализ Quicksort. Процесс разделения идет следующим образом: выбрав некоторое граничное значение x, мы затем проходим целиком по всему массиву. При этом выполняется точно n сравнений. Ожидаемое число обменов есть среднее этих ожидаемых значений для всех возможных границ x.

M = [Sx:1 <= x <= n:(x-1)*(n-(x-1))/n]/n

= [Su:0 <= u <= n-1: u*(n-u)]/n2

= n*(n-1)/2n-(2n2-3n+1)/6n = (n-1/n)/6 (2.20.)

В том случае, если бы нам всегда удавалось выбирать в качестве границы медиану, то каждый процесс разделения расщеплял бы массив на две половинки, и для сортировки требовалось бы всего n*logn подходов. В результате общее число сравнений было бы равно n*logn, а общее число обменов – n*log(n) /6. Но вероятность этого составляет только 1/n.

Главный из недостатков Quicksort – недостаточно высокая производительность при небольших n, впрочем этим грешат все усовершенствованные методы, одним из достоинств является то, что для обработки небольших частей в него можно легко включить какой-либо из прямых методов сортировки.

Тесты.

1. Идея сортировки массива прямым включением заключается в том, что

1.1. в сортируемой последовательности masi длиной n (i = 0..n - 1) последовательно выбираются элементы начиная со второго (i< 1) и ищутся их местоположения в уже отсортированной левой части последовательности.

1.2. в сортируемой последовательности masi длиной n (i=0..n-1) последовательно выбираются элементы начиная со первого (i< 1) и ищутся их местоположения в уже отсортированной левой части последовательности.

1.3. в сортируемой последовательности masi длиной n (i=0..n-1) последовательно выбираются элементы начиная со второго (i< 1) и ищутся их местоположения в не отсортированной левой части последовательности.

1.4. в сортируемой последовательности masi длиной n-1 (i=0..n-1) последовательно выбираются элементы начиная со второго (i< 1) и ищутся их местоположения в уже отсортированной левой части последовательности.

2. При сортировке массива прямым включением поиск места включения очередного элемента х в левой части последовательности mas может закончиться двумя ситуациями:

2.1. найден элемент последовательности mas, для которого masi>x; достигнут левый конец отсортированной слева последовательности.

2.2. найден элемент последовательности mas, для которого masi<x; достигнут левый конец отсортированной слева последовательности.

2.3. найден элемент последовательности mas, для которого masi<x; достигнут правый конец отсортированной слева последовательности.

2.4. найден элемент последовательности mas, для которого masi<x; достигнут левый конец не отсортированной слева последовательности.

3. При сортировке массива прямым включением для отслеживания условия окончания просмотра влево отсортированной последовательности используется прием «барьера». Суть его в том, что

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

3.2. к исходной последовательности слева добавляется фиктивный элемент X. В конце каждого шага просмотра влево отсортированной части массива элемент X устанавливается в значение того элемента, для которого будет осуществляться поиск места вставки.

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

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

4. Сортировка массива прямым включением требует в среднем

4.1. N^2/2 перемещений.

4.2. N^2/4 перемещений.

4.3. N^2 перемещений.

4.4. N/4 перемещений.

5. Выберите правильный вариант для вставки вместо знака «вопрос» во фрагмент кода сортировки массива прямым включением:

For i:=2toСount doBegin Tmp:=Arr[i]; j:=i-1; ?Begin Arr[j+1]:=Arr[j]; j:=j-1;End; Arr[j+1]:=Tmp;End;

5.1. While(j<0)and(Arr[j]<Tmp)do

5.2. While(j>0)and(Arr[j]>Tmp)do

5.3. While(j>0)and(Arr[j]<Tmp)do

5.4. While(j=0)and(Arr[j]=Tmp)do

6. Алгоритм сортировки массива бинарными включениями

6.1. вставляет i-йэлемент в готовую последовательность, которая пока не отсортирована, для нахождения места для i-гоэлемента используется метод бинарного поиска элемента.

6.2. вставляет i-йэлемент в готовую последовательность, которая уже отсортирована, для нахождения места для i-гоэлемента используется метод бинарного поиска элемента.

6.3. вставляет i-йэлемент в готовую последовательность, которая уже отсортирована, для нахождения места для i-гоэлемента используется метод Шелла поиска элемента.

6.4. вставляет i-йэлемент в пока готовую последовательность, которая пока не отсортирована, для нахождения места для i-гоэлемента используется метод Шелла поиска элемента.

7. При сортировке массива бинарными включениями всего будет произведено

7.1. N×log2Nсравнений.

7.2. ×log2Nсравнений.

7.3. log2(N/2)сравнений.

7.4. N/2*log2Nсравнений.

8. Изменится ли количество пересылок в сортировке массива бинарными включениями по отношению к количеству сравнений

8.1. станет больше

8.2. станет меньше

8.3. не изменится.

9. При сортировке массива методом бинарного включения внутренний цикл поиска с одновременным сдвигом следует разделить:

9.1. бинарным поиском находится позиция вставки, затем все элементы готовой последовательности, находящиеся левее этой позиции, сдвигаются вправо.

9.2. бинарным поиском находится позиция вставки, затем все элементы готовой последовательности, находящиеся правее этой позиции, сдвигаются влево.

9.3. бинарным поиском находится позиция вставки, затем все элементы готовой последовательности, находящиеся правее этой позиции, сдвигаются вправо.

9.4. бинарным поиском находится позиция вставки, затем все элементы готовой последовательности, находящиеся левее этой позиции, сдвигаются влево.

10. В чем состоит идея сортировки массива методом Шелла?

10.1. сортировке подвергаются не все подряд элементы последовательности, а только отстоящие друг от друга на определенном расстоянии большем h.

10.2. сортировке подвергаются не все подряд элементы последовательности, а только отстоящие друг от друга на определенном расстоянии меньшем h.

10.3. сортировке подвергаются не все подряд элементы последовательности, а только отстоящие друг от друга на определенном расстоянии h.

10.4. сортировке подвергаются не все подряд элементы последовательности, а только h элементов.

11. При сортировке массива методом Шелла на каждом шаге значение h изменяется, пока не станет (обязательно) равно

11.1. 3

11.2. 2

11.3. 0

11.4. 1.

12. Если h=1, то алгоритм сортировки массива методом Шелла вырождается в

12.1. пирамидальную сортировку.

12.2. сортировку прямыми включениями.

12.3. сортировку слиянием.

12.4. сортировку бинарного включения.

13. При сортировке массива методом Шелла расстояния между сравниваемыми элементами могут изменяться по-разному. Обязательным является лишь то, что

13.1. последний шаг должен равняться единице.

13.2. последний шаг должен равняться нулю.

13.3. первый элемент равен последнему элементу.

13.4. первый элемент равен предпоследнему элементу.

14. Эффективность сортировки массива методом Шелла объясняется тем, что

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

14.2. при каждом проходе элементы массива не упорядочены, а упорядоченность увеличивается при каждом новом просмотре данных.

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

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

15. Идея алгоритма сортировки массива прямым выбором заключается в том, что