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

141. Пузырьковая сортировка

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

B=<k1,k2,…kn>

Требуется переставить элементы списка В, так чтобы получить упорядоченный список B’=<k’1,k’2…k’n>. В котором для любого элемента 1<i<n, K(i)<=K’(i+1)

При обменной сортировки упорядоченный список получается систематическим обменом пары, рядом стоящих элементов не отвечающих требуемому порядку пока такие пары существуют.

Наиболее простой метод систематического обмена соседних элементов с неправильным порядком при просмотре списка слева на право. Определяет пузырьковую сортировку (максимальные элементы как бы всплывают в конце списка).

B=<20,-5,10,8,7>-исходный список

B1=<-5,10,8,7,20>-первый просмотр

B2=<-5,8,7,10,20>

B3=<-5,7,8,10,20>

Функция bubble сортирует входной массив методом пузырьковой сортировки

Float *bubble(float*a, int m, int n)

{char is=1;

Int I;

Float c;

While (is)

{is=0;

For (i=m+1;i<=n;i++)

If(a[i]<a[i-1])

{c=a[i];

A[i]=a[i-1]

A[i-1]=c;

Is=1;

}

Return (a);

}

Дополнительной памяти не требует.

142. Сортировка вставкой

Char v[2][5]={

‘a’’b’’c’’d’’e’

‘0’’1’’2’’3’’4’}

Main{

For (int i=0, i<2,i++

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

Int *a new int [10];

For(int i=t,i<10,i++)

{a[i]=random(25);

}

//…

Delete []a;

К каждому элементу по отдельности не обращаемся а работаем в цикле.

Темные силы

Ключевое слово volatile.

Int x=0;

Int main(){

While (x<10){

}

}

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

Int x=0;

Int main(){

If(x<10){

While(1){

}

}

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

Volatile int x=0;

Int main(){

While (x<10){

}

}

Компилятор при каждом обращение к х будет честно заново считывать её из памяти. Снятие спецификатор volatile невозможно.

Сортировка вставкой

Используется функция insert , это функция реализует сортировкой вставкой

Float *insert (float *s, int m, int n)

{

Int I,j,k;

Float aux;

For(i=m+1,i<=n,i++)

{aux=s[i];

For(b=m,k<=i&&s[k]=k;j++)

S[j+1]=s[i]

S[k]=aux;

}

Return (a);

}

Упорядоченный массив В’ получается из В следующим образом, сначала он состоит из единственного элемента к1 далее для i=2,…,N выполняется вставка узла Ki в В’ так что В` остается упорядоченным списком длины i. Рассмотрим пример списка

В=<20,-5,10,8,7>

B=<20,-5,10,8,7>

B=<-5,10,8,7> B`<20>

B=<10,8,7> B`<-5,20>

B=<8,7> B`<-5,10,20>

B=<7> B`<-5,8,10,20>

B=<> B`<-5,7,8,10,20>

Здесь оба списка В и В’ размещаются в массиве S. При чем список В занимает часть S с индексами от I до n, а В’ часть S с индексами от m до i-1.

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