Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.11.2009, 19:54. Просмотров 652. Ответов 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2009, 19:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Интерестная сортировочка массива! (C++):

задачка не очень интерестная - C++
Нужно реализовать и протестировать двухсвязный список для хранения целых чисел с интерфейсом добавления в конец, удаления с конца и поиском...

Сортировочка - Oracle
Может ли быть такое, что oracle для разных пользователей одной схеvы по-разному сортирует column char со значениями буквенными и чисто...

СОРТИРовочка - Базы данных
Имеется таблица: поле1 | поле2 ----------------- данные1 | данн ----------------- | ые ----------------- ...

Интерестная головоломка - Pascal
Помогите плиз решить головоломку:

Интерестная задачка - JavaScript
Доброго вечера. Есть пара textfield. В них динамически вводят числа паралельно. Можна ли сделать, чтобы при нажатии &quot;+&quot; и число...

Malwarebytes интерестная блокировка - Антивирусы
Здравствуйте. Поставил себе программку Malwarebytes сижу в инете через &quot;гугл хром&quot; и иногда после загрузки странички Malwarebytes выдает...

11
pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
12.11.2009, 20:07 #2
Цитата Сообщение от ton4ik Посмотреть сообщение
отсортировать столбцы по неубыванию
неубыванию это то есть по возрастанию??
0
ton4ik
2 / 2 / 0
Регистрация: 14.10.2009
Сообщений: 28
12.11.2009, 20:14  [ТС] #3
так точно

Добавлено через 3 минуты
поидее мы последнюю строчку сравнивыем житый элемент с жи+1 и если он меньше то переставляем местами столбец
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
12.11.2009, 20:44 #4
было-бы проще, если бы ты юзал vector<int, vector <int> > v;
в котором хранил вектора столбцов, тогда помень местами столбцы - swap(v[i],v[i+1])
0
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;
     }
   }
}
вот если с такой концовочкой то она выводит только отсортированную либо последнюю строчку либо вообще что-то странненькое
0
valeriikozlov
Эксперт С++
4674 / 2500 / 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();
}
1
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++)
извините я непонял почему такой цикл здесь,а можно чуточку объяснить?
0
valeriikozlov
Эксперт С++
4674 / 2500 / 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++)
извините я непонял почему такой цикл здесь,а можно чуточку объяснить?
Сортировку проводим пузырьковым способом. Т.е. при первом проходе, начиная с первого столбца, сравниваем его со следующим (по последним элементам) и если нужно то меняем их местами, и так до конца. За один проход, на последнем месте окажется столбец с самым большим последним элементом. Следующий проход начинаем также с первого элемента, но последний столбец уже не трогаем (там стоит столбец уже на своем месте). И так далее продолжаем проходы, сокращая верхнюю границу сортировки.
1
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");
 
}
0
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++)
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
10.12.2009, 00:00 #11
Цитата Сообщение от ton4ik Посмотреть сообщение
я так и не понял...
почему именно такой цикл?
Читаем: Кормена "Алгоримты построение и анализ" выбираем любой на вкус и начинаем читать, очень хорошо все расписано... осталось только прочечь..
0
valeriikozlov
Эксперт С++
4674 / 2500 / 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
Думаю что теперь, все станет понятно
0
10.12.2009, 09:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2009, 09:45
Привет! Вот еще темы с ответами:

Для каждого массива в диалоге ввести размер массива и элементы массива и найти сумму и среднее арифметическое значение для каждого массива - Turbo Pascal
даны 3 различных массива целых чисел(размер каждого не должен превышать 15). Для каждого массива в диалоге ввести размер массива и элементы...

Заданы два массива. Проверить, что максимальный элемент массива A больше максимального элемента массива B - Delphi
Заданы два массива: A={a1, a2, a3, a4}, B={b1, b2…..b6}. Переменной S присвоить значение –1, если максимальный элемент массива A больше...

Для массива x(n) определить значение максимального эллемента массива и поменять его с первым элементом массива - Pascal ABC
Для массива x(n) определить значение максимального эллемента массива и поменять его с первым элементом массива

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций. - Visual C++
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой последовательности нули, а затем единицы. 2 У...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.