Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
#1

Интерестная сортировочка массива! - C++

12.11.2009, 19:54. Просмотров 633. Ответов 11
Метки нет (Все метки)

Постановка задачи:
дан массив A[100][50], отсортировать столбцы по неубыванию последних элементов столбцов.
вот вообщемто что я сделал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <conio.h>
#include <iomanip.h>
#include <iostream.h>
 
void main()
{
int A[100][50],i,j,m,n,x;
cout<<"Input n"<<endl<<"n="; cin>>n;
cout<<"Input m"<<endl<<"m="; cin>>m;
for (i=0;i<n;i++)
 for (j=0;j<m;j++)
  cin>>A[i][j];
clrscr();
cout<<"Array:"<<endl;
for (i=0;i<n;i++)
 {for (j=0;j<m;j++)
  cout<<setw(3)<<A[i][j];
  cout<<endl;}
//а вот здесь то начинается самое интерестное!( это примерно как я представляю, но это не правильно)
for (i=n-1;i<n;i++)
 for (j=0;j<m;j++)
  if (A[i][j]>a[i][j+1])
   {for (i=0;i<n;i++)
    for (j=0;j<m;j++)
     x=A[i][j];
     A[i][j]=A[i][j+1];
     A[i][j+1]=x;
     cout<<A[i][j]<<" ";}
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2009, 19:54     Интерестная сортировочка массива!
Посмотрите здесь:

Выделение памяти для массива через функцию и использование этого массива C++
Не использую доп. элементов массива переставить элементы массива в обратном порядке C++
C++ Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат
C++ Массивы (найти номер максимального элемента массива, произведение элементов массива)
Постороить из 2 мерного массива в 1 мерный, который содержит все элементы 2 мерного массива , содержащихся по периметру массива C++
Найти сумму отрицательных элементов массива и порядочить элементы массива по возрастанию C++
Вычислить сумму максимального элемента массива и количества нулевых элементов массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
12.11.2009, 20:07     Интерестная сортировочка массива! #2
Цитата Сообщение от ton4ik Посмотреть сообщение
отсортировать столбцы по неубыванию
неубыванию это то есть по возрастанию??
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.11.2009, 20:14  [ТС]     Интерестная сортировочка массива! #3
так точно

Добавлено через 3 минуты
поидее мы последнюю строчку сравнивыем житый элемент с жи+1 и если он меньше то переставляем местами столбец
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
12.11.2009, 20:44     Интерестная сортировочка массива! #4
было-бы проще, если бы ты юзал vector<int, vector <int> > v;
в котором хранил вектора столбцов, тогда помень местами столбцы - swap(v[i],v[i+1])
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.11.2009, 20:49  [ТС]     Интерестная сортировочка массива! #5
ну мы такого не проходили...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (i=n-1;i<n;i++)
 for (j=0;j<m;j++)
  if (A[n-1][j-1]>A[n-1][j])
   {
     {x=A[i][j-1];
     A[i][j-1]=A[i][j];
     A[i][j]=x;
     for (i=0;i<n;i++)
      {for (j=0;j<m;j++)
       cout<<setw(3)<<A[i][j];
       cout<<endl;
     }
   }
}
вот если с такой концовочкой то она выводит только отсортированную либо последнюю строчку либо вообще что-то странненькое
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.11.2009, 21:00     Интерестная сортировочка массива! #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <conio.h>
#include <iomanip.h>
#include <iostream.h>
 
void main()
{
int A[100][50],i,j,m,n,x, i1;
cout<<"Input n"<<endl<<"n="; cin>>n;
cout<<"Input m"<<endl<<"m="; cin>>m;
for (i=0;i<n;i++)
 for (j=0;j<m;j++)
  cin>>A[i][j];
clrscr();
cout<<"Array:"<<endl;
for (i=0;i<n;i++)
 {for (j=0;j<m;j++)
  cout<<setw(3)<<A[i][j];
  cout<<endl;}
//Г* âîò çäåñü ГІГ® Г*Г*Г·ГЁГ*Г*ГҐГІГ±Гї Г±Г*ìîå ГЁГ*òåðåñòГ*îå!( ГЅГІГ® ïðèìåðГ*Г® ГЄГ*ГЄ Гї ïðåäñòГ*âëÿþ, Г*Г® ГЅГІГ® Г*ГҐ ГЇГ°Г*âèëüГ*Г®)
for (i=0;i<m-1;i++)
 for (j=0;j<m-1-i;j++)
  if (A[n-1][j]>A[n-1][j+1])
   for (i1=0;i1<n;i1++)
    {
     x=A[i1][j];
     A[i1][j]=A[i1][j+1];
     A[i1][j+1]=x;
    }
cout<<"Array new:"<<endl;
for (i=0;i<n;i++)
 {for (j=0;j<m;j++)
  cout<<setw(3)<<A[i][j];
  cout<<endl;}
 
getch();
}
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.11.2009, 21:20  [ТС]     Интерестная сортировочка массива! #7
спасибо!!
C++
1
2
for (i=0;i<m-1;i++)
 for (j=0;j<m-1-i;j++)
извините я непонял почему такой цикл здесь,а можно чуточку объяснить?
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2009, 05:59     Интерестная сортировочка массива! #8
Цитата Сообщение от ton4ik Посмотреть сообщение
Код C++1
2 for (i=0;i<m-1;i++)
for (j=0;j<m-1-i;j++)
извините я непонял почему такой цикл здесь,а можно чуточку объяснить?
Сортировку проводим пузырьковым способом. Т.е. при первом проходе, начиная с первого столбца, сравниваем его со следующим (по последним элементам) и если нужно то меняем их местами, и так до конца. За один проход, на последнем месте окажется столбец с самым большим последним элементом. Следующий проход начинаем также с первого элемента, но последний столбец уже не трогаем (там стоит столбец уже на своем месте). И так далее продолжаем проходы, сокращая верхнюю границу сортировки.
Pavel1133
3 / 3 / 0
Регистрация: 12.10.2009
Сообщений: 81
13.11.2009, 15:44     Интерестная сортировочка массива! #9
У меня работает тока так


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <conio.h>
#include <iomanip>
#include <iostream>
 using namespace std;
void main()
{
int A[100][50],i,j,m,n,x, i1;
cout<<"Input n \n"<<"n="; cin>>n;
cout<<"Input m \n"<<"m="; cin>>m;
for (i=0;i<n;i++)
 for (j=0;j<m;j++)
  cin>>A[i][j];
2
cout<<"Array:"<<endl;
for (i=0;i<n;i++)
 {for (j=0;j<m;j++)
  cout<<setw(3)<<A[i][j];
  cout<<endl;}
//а вот здесь то начинается самое интерестное!( это примерно как я представляю, но это не правильно)
for (i=0;i<m-1;i++)
 for (j=0;j<m-1-i;j++)
  if (A[n-1][j]>A[n-1][j+1])
   for (i1=0;i1<n;i1++)
    {
     x=A[i1][j];
     A[i1][j]=A[i1][j+1];
     A[i1][j+1]=x;
    }
cout<<"Array new:"<<endl;
for (i=0;i<n;i++)
 {for (j=0;j<m;j++)
  cout<<setw(3)<<A[i][j];
  cout<<endl;}
system("pause");
 
}
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
09.12.2009, 20:11  [ТС]     Интерестная сортировочка массива! #10
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Сортировку проводим пузырьковым способом. Т.е. при первом проходе, начиная с первого столбца, сравниваем его со следующим (по последним элементам) и если нужно то меняем их местами, и так до конца. За один проход, на последнем месте окажется столбец с самым большим последним элементом. Следующий проход начинаем также с первого элемента, но последний столбец уже не трогаем (там стоит столбец уже на своем месте). И так далее продолжаем проходы, сокращая верхнюю границу сортировки.
я так и не понял...
почему именно такой цикл?
C++
1
2
for (i=0;i<m-1;i++)
 for (j=0;j<m-1-i;j++)
outoftime
║XLR8║
506 / 428 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
10.12.2009, 00:00     Интерестная сортировочка массива! #11
Цитата Сообщение от ton4ik Посмотреть сообщение
я так и не понял...
почему именно такой цикл?
Читаем: Кормена "Алгоримты построение и анализ" выбираем любой на вкус и начинаем читать, очень хорошо все расписано... осталось только прочечь..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2009, 09:45     Интерестная сортировочка массива!
Еще ссылки по теме:

задачка не очень интерестная C++
C++ Найти среднее арифметическое элементов массива, сравнить два массива поэлементно
Подсчитать число элементов массива A[n], превосходящих среднее геометрическое этого массива C++
Заменить элементы массива,стоящие на нечетных позициях, на среднее арифметическое массива C++
Найти номер элемента массива У, ближайшего по значению к наименьшему элементу массива Х. C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4663 / 2489 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
10.12.2009, 09:45     Интерестная сортировочка массива! #12
Цитата Сообщение от ton4ik Посмотреть сообщение
я так и не понял...
почему именно такой цикл?
Допустим у нас 4 столбца. Тогда проверка будет выглядеть так.
Делаем первый проход, сравниваем сначало первый столбец со вторым, если первый столбец больше (имеется ввиду сравниваемые элементы столбцов здесь и далее), то меняем его местами со вторым. Далее сравниваем второй с третьим, если нужно меняем их местами. Далее сравниваем третий с четвертым и тоже если нужно меняем. Вот на этом моменте у нас последний столбец самый большой из всех предыдущих.
Делаем второй проход. Так как четвертый столбец уже стоит на своем месте, то делаем те же операции как и впредыдущем проходе только с первым и вторым, вторым и третьим. В конце второго прохода на третьем месте будет стоять столбец, который больше первого и второго (но меньше четвертого).
Делаем третий проход. На даном этапе будет сравнение только первого и второго столбца, так как остальные стоят на своих местах.
Все, сортировка закончена.
Теперь о коде:
C++
1
2
for (i=0;i<m-1;i++) // этой строкой задаются проходы. Например для случая описанного выше m=4, тогда i будет принимать значения 0, 1, 2 (т.е. три прохода)
 for (j=0;j<m-1-i;j++) // в этой строке задаются сравнения. Например для случая описанного выше , будет выглядеть так: при i=0, j будет принимать значения 0, 1, 2. Эти значения j используем так: (j=0) - сравниваем столбец с индексом 0 и с индексом 1; (j=1) - сравниваем столбец с индексом 1 и индексом 2; (j=2) - сравниваем столбец  с индексом 2 и индексом 3. При i=1 , j принимает значения 0, 1
Думаю что теперь, все станет понятно
Yandex
Объявления
10.12.2009, 09:45     Интерестная сортировочка массива!
Ответ Создать тему
Опции темы

Текущее время: 09:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru