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

Void main()

{

const int m = 5;

double a[m] = {5, 3, 2, 3, 1},b[m]={5, 3, 2, 3, 2},

c[m] = {5, 3, 1, 3, 10};

cout << lexicographical_compare(a,a+m,b,b+m); //1

cout << lexicographical_compare(a,a+m,c,c+m); //0

cout << lexicographical_compare(a,a+m,b,b+m,

greater<int>()); //0

}

Алгоритм merge виконує злиття відсортованих послідовностей.

Приклад:

#include <iostream>

#include <algorithm>

using namespace std;

Void main()

{

const int m = 5;

double a[m] = {3, 4, 8, 17, 20},

b[m] = {5, 6, 8, 10, 35}, c[m * 2];

int i;

merge(a, a + m, b, b + m, c);

// 3 4 5 6 8 8 10 17 20 35

for (i = 0; i < m * 2; i++)cout << c [ i ] << " ";

cout << endl;

}

Алгоритми next_permutation, prev_permutation.

Елементи будь-якої послідовності можна розташувати різними способами.

Для послідовності довжини n таких перестановок існує n! (1*2*...*n).

Алгоритм next_permutation проводить чергову перестановку в лексикографічному порядку, а алгоритм prev_permutation – попередню. Алгоритми повертають булеве значення true, якщо наступна перестановка існує, і false в іншому випадку.

template<class Bi>

bool next__permutation(Bi first , Bi last);

template<class Bi, class Compare>

bool next_permutation(Bi first, Bi last, Compare comp);

template<class Bi>

bool prev_permutation(Bi first, Bi last);

template<class Bi, class Compare>

bool prev_permutation(Bi first, Bi last, Compare comp);

Приклад:

#include <iostream>

#include <algorithm>

using namespace std;

Void main()

{

const int m = 3;

int a[m]={1, 4, 2}, b[m];

int i;

copy(a, a + m, b);

cout << " next_permutation(a, a + m);" << endl;

while (next_permutation(a, a + m))

{

for (i = 0; i < m; i++) cout << a [ i ] << " ";

cout << endl;

}

cout << " prev_permutation(b, b + m);" << endl;

while (prev_permutation(b, b + m))

{

for (i = 0; i < m; i++) cout << b [ i ] << " ";

cout << endl;

}

}

Результат роботи програми:

next_permutation(a, a + m):

2 1 4

2 4 1

4 1 2

4 2 1

prev_permutation(b, b + m):

1 2 4

Алгоритми partial_sort, partial_sort_copy.

Алгоритм partial_sort також виконує часткове сортування послідовності.

Після виконання алгоритму елементи від first до middle розташовуватимуться в такому ж порядку, як після повного сортування.

Алгоритм partial_sort_copy виконує ті ж дії з копією послідовності.

tempiate<class Ran>

void partial_sort(Ran first, Ran middle, Ran last);

template<class Ran, class Compare>

void partial_sort(Ran first, Ran middle,

Ran last, Compare comp);

template<class In, class Ran>

Ran partial_sort_copy(In first, In last,

Ran result_first, Ran result_last);

template<class In, class Ran, class Compare>

Ran partial_sort_copy(In first, In last,

Ran result_first, Ran result_last, Compare comp);

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

#include <iostream>

#include <functional>

#include <algorithm>

using namespace std;

Void main()

{

const int m = 8;

int a[m] = {3, 1, 2, 34, 8, 7, 20, 2};

int i;

partial_sort(a, a + 5, a + m, greater<int>());

for (i = 0 ; i < m; i++) cout << a[i] << " ";

cout << endl; // 34 20 8 7 3 1 2 2

}