Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 1
Регистрация: 14.10.2009
Сообщений: 28

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

12.11.2009, 19:54. Показов 1027. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2009, 19:54
Ответы с готовыми решениями:

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

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

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

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

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

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
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
12.11.2009, 21:00
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
2 / 2 / 1
Регистрация: 14.10.2009
Сообщений: 28
12.11.2009, 21:20  [ТС]
спасибо!!
C++
1
2
for (i=0;i<m-1;i++)
 for (j=0;j<m-1-i;j++)
извините я непонял почему такой цикл здесь,а можно чуточку объяснить?
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
13.11.2009, 05:59
Цитата Сообщение от ton4ik Посмотреть сообщение
Код C++1
2 for (i=0;i<m-1;i++)
for (j=0;j<m-1-i;j++)
извините я непонял почему такой цикл здесь,а можно чуточку объяснить?
Сортировку проводим пузырьковым способом. Т.е. при первом проходе, начиная с первого столбца, сравниваем его со следующим (по последним элементам) и если нужно то меняем их местами, и так до конца. За один проход, на последнем месте окажется столбец с самым большим последним элементом. Следующий проход начинаем также с первого элемента, но последний столбец уже не трогаем (там стоит столбец уже на своем месте). И так далее продолжаем проходы, сокращая верхнюю границу сортировки.
1
3 / 3 / 1
Регистрация: 12.10.2009
Сообщений: 81
13.11.2009, 15:44
У меня работает тока так


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
2 / 2 / 1
Регистрация: 14.10.2009
Сообщений: 28
09.12.2009, 20:11  [ТС]
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Сортировку проводим пузырьковым способом. Т.е. при первом проходе, начиная с первого столбца, сравниваем его со следующим (по последним элементам) и если нужно то меняем их местами, и так до конца. За один проход, на последнем месте окажется столбец с самым большим последним элементом. Следующий проход начинаем также с первого элемента, но последний столбец уже не трогаем (там стоит столбец уже на своем месте). И так далее продолжаем проходы, сокращая верхнюю границу сортировки.
я так и не понял...
почему именно такой цикл?
C++
1
2
for (i=0;i<m-1;i++)
 for (j=0;j<m-1-i;j++)
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
10.12.2009, 00:00
Цитата Сообщение от ton4ik Посмотреть сообщение
я так и не понял...
почему именно такой цикл?
Читаем: Кормена "Алгоримты построение и анализ" выбираем любой на вкус и начинаем читать, очень хорошо все расписано... осталось только прочечь..
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
10.12.2009, 09:45
Цитата Сообщение от 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.12.2009, 09:45
Помогаю со студенческими работами здесь

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru