Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Справочная информация по алгоритмам.doc
Скачиваний:
34
Добавлен:
20.06.2014
Размер:
399.87 Кб
Скачать

Вопросы по теме

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

  2. Инверсные массивы

  3. Критерии оценки различных методов сортировки

3. Методы сортировки линейных структур данных

Процесс сортировки любым методом состоит из нескольких циклов, в каждом цикле осуществляется просмотр всей последовательности и проводятся операции. Один цикл обработки называется проходом.

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

3.1 Метод выбора.

void swap (int*, int*);

int minx (int*, int);

void main (){

int x[N], i;

for( i=0; i<N-1; i++)

swap(x[i], x[minx (x, i)]);

}

void swap (int *A, int *B){

int S;

S=*A;

*A=*B;

*B=S;

}

int minx (int x[N], int i){

int j, max;

min=i;

for( j=i-1; j<N; j++)

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

min=j;

return min

}

3.2 Метод обмена.

#define N 100

int x[N];

int I, j;

int NS;

for(i=N-1; i>0; i--){

NS=1;

for(j=0; j<i; j++)

if(x[j] > x[j+1]){

swap(&x[i], &x[j+1]);

NS=0;

}

if(NS==1)

break;

}

}

Среднее число сравнений –

3.3 Метод подсчета

Не применим для массивов с повторяющимися элементами. Количество перестановок равно нулю, количество сравнений при каждом проходе – N2.

#define N 100

int i, j, k, A[N], B[N];

for(i=0; i<N; i++){

k=0;

for(j=0; j<N; j++)

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

k++;

B[k]=A[i];

}

3.4 Метод Шелла

Год появления – 1959. представляет собой модификацию метода вставок. Упорядочиванию подвергаются не все элементы последовательности сразу, а элементы группы, члены которой определяются шагом. На первом проходе шаг принимается равным N/2 (N – количество элементов). В результате образуетсяN/2 групп по два элемента, если N четно и одна из одного элемента, если N нечетно. Метод вставок выполняется для каждой из групп, после чего шаг уменьшается в два раза и вызов метода вставок осуществляется для вновь образованных групп. Процедура повторяется до тех пор, пока не будет вызвана сортировка для группы с шагом один.

Алгоритм:

Программа использует подпрограмму метода вставок, получающую в качестве параметров адрес начала массива, шаг и количество элементов в массиве.

Действия повторяют схему метода вставок за тем исключением, что все циклы осуществляются с шагом не равным единице.

В основной программе используется два вложенных цикла. Цикл верхнего уровня для шага равного N/2 (деление нацело), пока шаг больше нуля. Модификация шага – шаг делится нацело на два.

Внутренний цикл для счетчика от нуля, пока счетчик меньше шага. Модификация шага – увеличивается на единицу. Содержит оператор вызова подпрограммы, реализующей метод вставок с тремя фактическими параметрами: указатель на начало массива увеличенный на счетчик внутреннего цикла, количество элементов за вычетом значения счетчика внутреннего цикла, шаг.

3.5 Метод вставок

#define N 100

int A[N], B[N], i,j,k;

for(i=0;i<N;i++){

for(j=0; j<i && A[i]>B[j]; j++)

for(k=i; k>j; k--)

B[k]=B[k-1];

B[j]=A[i];

}

3.6 Древовидная сортировка

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

Отсортированная последовательность получается на втором этапе. Второй этап – это смешанный обход дерева. Смешанным называется обход, выполняющийся в соответствии со следующим правилом. Первым считается элемент или узел дерева занимающий левую позицию. Каждый элемент может быть считан после того, как считаны все элементы его левой подветви. После этого считываются элементы его правой подветви в соответствии с этим же правилом.