Рабочий стол > DL Руководство пользователя > Сортировки > Просмотр
Сортировки Войти | Зарегистрироваться   Просмотр версии для печати текущей страницы.

Добавлен Egor, отредактирован Egor Sep 11, 2016
Метки: 
(нет)

Вы просматриваете старую версию (v. 4) этой страницы.

Описаны сортировки

1     Сортировка обменом Сортировка с номерами
2     Сортировка пузырьком - не меняя порядок одинаковых чисел
3     Сортировка подсчетом (черпаком) - линейная сортировка целых чисел

Сортировка по возрастанию
...
int a[10];
...
sort(a,a+10);
...

Сортировка по убыванию
...
int a[10];
...
sort(a,a+10); reverse(a,a+10); // после сортировки реверсируем массив a

Альтернатива (сортировка по убыванию )
sort(a,a+10,greater<int>());

Сортировка пузырьком - не меняя порядок одинаковых чисел
...
int a[10];
...
stable_sort(a,a+10);
...

Сортировка с номерами

от 0 до 9

ввод
int a[10],i;
for (i=0; i<10; i++) cin >> a[i];

добавление последней цифрой номера (для двузначных чисел умножаем на 100 и т.д)
for (i=0; i<10; i++) a[i]=a[i]*10+i;

Сортируем
sort(a,a+10);

Выводим 3 первых номера после сортировки (для двузначных чисел %100 - остаток от деления на 100 и т.д)
for (i=0; i<3; i++) cout << (a[i]%10)+1 << endl;

Альтернатива - использование вектора

Для сортировки с номерами можно сделать так:

vector<pair<int, int> > A(N);
for (int i = 0; i < N; i++)
{
cin >> A[i].first;
A[i].second=i;
};

Выводим 3 первых номера после сортировки
for (int i = 0; i < 3; i++) cout << A[i].second;

Пусть имеется массив из N точек с координатами x и y

Массив координат точек X,Y сортируется по возрастанию X, а в случае равенства X - по возрастанию Y
В случае, когда гарантируется, что все X различны, второй массив просто параллельно передвигается никогда не участвуя в сравнениях

Например
vector<pair<int, int> > A(N);
for(int i = 0; i < N; i++)
cin >> A[i].first >> A[i].second;
sort(A.begin(), A.end());

Сортировка подсчетом (черпаком)

#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[15000],i,n,j;
for (i=0; i<15000; i++) a[i]=0;
cin >> n;
for (i=0; i<n; i++)
{ cin >> j; a[j]++; }
for (i=0; i<15000; i++)
if (a[i]) for (j=0; j<a[i]; j++) cout << i;
}

Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами