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

Версия 1 Egor
на Sep 11, 2016 11:31.

 
в сравнении с
Текущий из Egor
за Oct 09, 2016 11:04.

 
Ключ
Эти линии были удалены. Это слово было удалено.
Эти линии были добавлены. Это слово было добавлено.

Просмотр истории страницы


Есть 20 изменений. Просмотреть первое изменение .

 Сортировка обменомСортировка с номерами
 Сортировка пузырьком - не меняя порядок одинаковых чисел
 Сортировка подсчетом (черпаком) - линейная сортировка целых чисел
  Описаны сортировки
  
Сортировка по возрастанию
  ...
  int a[10];
  ...
  sort(a,a+10);
  ...
  1     Сортировка обменом Сортировка с номерами
 2     Сортировка пузырьком - не меняя порядок одинаковых чисел
 3     Сортировка подсчетом (черпаком) - линейная сортировка целых чисел
  
Сортировка по убыванию
  ...
  int a[10];
  ...
  sort(a,a+10); reverse(a,a+10); // после сортировки реверсируем массив a
  *Сортировка по возрастанию*
 {quote}_..._
 _int a\[10\];_
 _..._
 _sort(a,a+10);_
 _..._{quote}
  
*Сортировка по убыванию*
 {quote}_..._
 _int a{_}_\[10\]__;_
 _..._
 _sort(a,a+10); reverse(a,a+10); // после сортировки реверсируем массив a{_}{quote}
  
 Альтернатива (сортировка по убыванию )
sort(a,a+10,greater<int>());
  {quote}{_}sort(a,a+10,greater<int>());_{quote}
  
*Сортировка пузырьком* \- не меняя порядок одинаковых чисел
 {quote}_..._
 _int a{_}_\[10\]__;_
 _..._
 _stable_sort(a,a+10);_
 _..._{quote}
  
*Сортировка с номерами*
  
Сортировка пузырьком - не меняя порядок одинаковых чисел
  ...
  int a[10];
  ...
  stable_sort(a,a+10);
  ...
  
 Сортировка с номерами
  
 от 0 до 9
  
 ввод
int a[10],i;
 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 и т.д)
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}
  
 Сортируем
sort(a,a+10);
  {quote}{_}sort(a,a+10);_{quote}
  
 Выводим 3 первых номера после сортировки (для двузначных чисел %100 - остаток от деления на 100 и т.д)
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}
  
 
 Альтернатива - использование вектора
  
 Для сортировки с номерами можно сделать так:
  
vector<pair<int, int> > A(N);
  for (int i = 0; i < N; i++) { cin >> A[i].first; A[i].second=i;};
  {quote}{_}vector<pair<int, int> > A(N);_
 _for (int i = 0; i < N; i++)_
 cin >> A\[i\].first; \_bq.&nbsp;_A\[i\].second=i;{quote}\\
  
 Выводим 3 первых номера после сортировки
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 различны
  второй массив просто параллельно передвигается
  никогда не участвуя в сравнениях
  Массив координат точек X,Y сортируется по возрастанию X,&nbsp;а в случае равенства X - по возрастанию Y
 В случае, когда гарантируется, что все X различны,&nbsp;второй массив просто параллельно передвигается&nbsp;никогда не участвуя в сравнениях
  
 Например
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}{_}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}
  
 
  
  
  
 Сортировка подсчетом (черпаком)
  
 #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}
Powered by Atlassian Confluence, the Enterprise Wiki. (Version: http://www.atlassian.com/software/confluence Build:#2.6.1 916) - Ошибка/новая особенность - Свяжитесь с Администраторами