| | Описаны сортировки |
| | |
| | 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]++; } |
| | | \{ cin >> j; a[j]++; \} |
| | _for (i=0; i<15000; i++)_ |
| | _if (a{_}_\[i\]__) for (j=0; j<a{_}_\[i\]__; j++) cout << i;_ |
| | _}_ |