Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Быстрая сортировка Хоара. Сортировка методом пузырькаСодержание книги
Поиск на нашем сайте
Основная идея, на которой базируется метод быстрой сортировки Хоара, состоит в том, чтобы взять одну из записей, скажем R 1, и передвинуть ее на то место, которое она должна занять после сортировки, скажем в позицию S. В поиске этой окончательной позиции придется несколько перекомпоновать и остальные записи таким образом, чтобы слева от позиции S не оказалось ни одной записи с большим ключом, а с права — с меньшим. В результате последовательность окажется разбитой таким образом, что исходная задача сортировки всего массива записей будет сведена к задачам независимой сортировки пары массивов R 1 … Rs -1 и Rs +1 … RN меньшей длины. Предположим, что нам даны n элементов. Их нужно рассортировать по возрастанию. Выберем средний элемент. Обозначим его через Х. Разобьем массив на 2 части. Зафиксируем средний элемент. Сначала поменяем местами самый левый и самый правый элементы, для которых характерно, что левый элемент больше правого элемента. Так постепенно продвигаемся с двух концов к середине.
44 55 12 42 94 06 18 67 — 1 проход ai < X X aj >X
ai<X Х aj>X
18 06 12 42 94 55 44 67
< X Х > X
В результате массив разделился на 2 части, левую и правую — с ключами, меньшими и большими Х соответственно. Для продолжения сортировки применим выше изложенный алгоритм к первой и второй частям и т.д. Приведем программную реализацию алгоритма Хоара на языке С++.
#include "stdafx.h" #include <math.h> #include <iostream> using namespace std; #include <conio.h> #define SIZE 40 int n; // глобальная переменная
void xoor(int*,int,int,int);
int main() {
// Инициализация int A[SIZE],i;
cout<<"Input n= \n"; cin>>n;
cout<<" Enter items of array A:\n";
for(i=0;i<n;i++) cin>>A[i];
xoor(A,0,n-1,n); // функция сортировки методом Хоора
cout<<" Selected array A: \n"; for(i=0;i<n;i++)cout<<" "<<A[i];
getch(); return 0;
}
// РЕКУРСИЯ
void xoor(int* A,int m,int l,int n) {
int i,j=l,k=0,p,X=A[(m+l)/2];
for(i=m;i<=(l+m)/2;i++) {
if(((A[i]>X) && (A[j]<=X))||(A[i]> A[j])) { p=A[j]; A[j]=A[i]; A[i]=p; xoor(A,m,l,n);
} else i--;
j--; if(j==(l+m)/2) { i++; j=l; }
}
for(i=0;i<=n-1;i++) { if(A[i]<A[i+1])k=k+1;
} if(k==n) return;
if (m<(l-1)) // сортировка правой части от m до l { m=(l+m)/2; xoor(A,m,l,n); }
else // сортировка левой части от l/2 элемента до m { l=m; m=l/2; if(l!=0)xoor(A,m,l,n);
} } Сортировка «методом пузырька» Идея, лежащая в основе сортировки «методом пузырька» заключается в следующем. Файл просматривается несколько раз последовательно. Каждый просмотр состоит из сравнения каждого элемента xi файла со следующим за ним элементом xi +1 и «обмена» (транспозиции) этих элементов, если они располагаются не в нужном порядке [3]. Например, задан файл 25, 57, 48, 37, 12, 92, 86, 33. Требуется отсортировать записи, расположив их по возрастанию значений элементов файла. Действия сортировки оформим в виде таблицы.
Эффективность «метода пузырька» считается следующим образом. Имеется в худшем случае n –1 просмотров файла и n –1 сравнений в каждом просмотре. Таким, образом, общее число сравнений равно (n –1) (n –1) = n 2 – 2 n +1, что составляет » n 2. Единственным плюсом «метода пузырька» является то, что для такой сортировки требуется мало дополнительного пространства (одна дополнительная запись для временного хранения той записи, для которой выполняется транспозиция, и несколько простых целых переменных).
|
||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2021-12-15; просмотров: 117; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.009 с.) |
|||||||||||||||||||||||||||||||||||