| Описаны сортировки |
| |
| 1 Сортировка обменом Сортировка с номерами |
| 2 Сортировка пузырьком - не меняя порядок одинаковых чисел |
| 3 Сортировка подсчетом (черпаком) - линейная сортировка целых чисел |
| |
| *Сортировка по возрастанию* |
| | _bq. ..._ |
| _bq. int a\[10\];_ |
| _bq. ..._ |
| _bq. sort(a,a+10);_ |
| _bq. ..._ |
| | {quote}_..._ |
| _int a\[10\];_ |
| _..._ |
| _sort(a,a+10);_ |
| _..._{quote} |
| |
| *Сортировка по убыванию* |
| | _bq. ..._ |
| _bq. _{_}int a{_}_\[10\]__;_ |
| _bq. __..._ |
| _bq. _{_}sort(a,a+10); reverse(a,a+10); // после сортировки реверсируем массив a_ |
| | {quote}_..._ |
| _int a{_}_\[10\]__;_ |
| _..._ |
| _sort(a,a+10); reverse(a,a+10); // после сортировки реверсируем массив a{_}{quote} |
| |
| Альтернатива (сортировка по убыванию ) |
| | _bq. _{_}sort(a,a+10,greater<int>());_ |
| | {quote}{_}sort(a,a+10,greater<int>());_{quote} |
| |
| *Сортировка пузырьком* \- не меняя порядок одинаковых чисел |
| | _bq. __..._ |
| _bq. _{_}int a{_}_\[10\]__;_ |
| _bq. __..._ |
| _bq. _{_}stable_sort(a,a+10);_ |
| _bq. __..._ |
| | {quote}_..._ |
| _int a{_}_\[10\]__;_ |
| _..._ |
| _stable_sort(a,a+10);_ |
| _..._{quote} |
| |
| *Сортировка с номерами* |
| |
| от 0 до 9 |
| |
| ввод |
| | _bq. _{_}int a{_}_\[10\]__,i;_ |
| _bq. _{_}for (i=0; i<10; i++) cin >> a{_}_\[i\]__;_ |
| | {quote}{_}int a{_}_\[10\]__,i;_ |
| _for (i=0; i<10; i++) cin >> a{_}_\[i\]__;_{quote} |
| |
| добавление последней цифрой номера (для двузначных чисел умножаем на 100 и т.д) |
| | _bq. _{_}for (i=0; i<10; i++) a{_}_\[i\]__=a{_}_\[i\]__\*10+i;_ |
| | {quote}{_}for (i=0; i<10; i++) a{_}_\[i\]__=a{_}_\[i\]__\*10+i;_{quote} |
| |
| Сортируем |
| | _bq. _{_}sort(a,a+10);_ |
| | {quote}{_}sort(a,a+10);_{quote} |
| |
| Выводим 3 первых номера после сортировки (для двузначных чисел %100 - остаток от деления на 100 и т.д) |
| | _bq. _{_}for (i=0; i<3; i++) cout << (a{_}_\[i\]__%10)+1 << endl;_ |
| | {quote}{_}for (i=0; i<3; i++) cout << (a{_}_\[i\]__%10)+1 << endl;_{quote} |
| |
| Альтернатива - использование вектора |
| |
| Для сортировки с номерами можно сделать так: |
| |
| | _bq. _{_}vector<pair<int, int> > A(N);_ |
| _bq. _{_}for (int i = 0; i < N; i++)_ |
| _bq. _{ |
| _bq. _cin >> A\[i\].first; |
| _bq. _A\[i\].second=i; |
| _bq. _}; |
| \\ |
| | {quote}{_}vector<pair<int, int> > A(N);_ |
| _for (int i = 0; i < N; i++)_ |
| cin >> A\[i\].first; \_bq. _A\[i\].second=i;{quote}\\ |
| |
| Выводим 3 первых номера после сортировки |
| | _bq. _{_}for (int i = 0; i < 3; i++) cout << A{_}_\[i\]__.second;_ |
| | {quote}{_}for (int i = 0; i < 3; i++) cout << A{_}_\[i\]__.second;_{quote} |
| |
| Пусть имеется массив из N точек с координатами x и y |
| |
| Массив координат точек X,Y сортируется по возрастанию X, а в случае равенства X - по возрастанию Y |
| В случае, когда гарантируется, что все X различны, второй массив просто параллельно передвигается никогда не участвуя в сравнениях |
| |
| Например |
| | _bq. _{_}vector<pair<int, int> > A(N);_ |
| _bq. _{_}for(int i = 0; i < N; i++)_ |
| _bq. _{_}cin >> A{_}_\[i\]__.first >> A{_}_\[i\]__.second;_ |
| _bq. _{_}sort(A.begin(), A.end());_ |
| | {quote}{_}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());_{quote} |
| |
| *Сортировка подсчетом (черпаком)* |
| | |
| {code:title=Cherpak.cpp\|borderStyle=solid}\#include <bits/stdc++.h>using namespace std; |
| | {code:title=Cherpak.cpp\|borderStyle=solid} |
| #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; |
| | }{code} |
| | } |
| {code} |