Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
1

Почему не сортируется массив?

07.06.2017, 15:02. Просмотров 190. Ответов 7
Метки нет (Все метки)

Доброго времени суток уважаемые Форумчане,нужно отсортировать в порядке возрастания каждую строку матрицы, код написан, но не сортирует почему-то, подскажите, пожалуйста, в чем ошибка?
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
37
38
39
40
41
42
43
int main(){
//объявление
int i,j,t,dl,m,max,num1,num2,stec,mass[60][60];
//вводим длину массива
    cin>>t;
    cin>>m;
    dl=m; // переменная, используемая в сортировке
//заполняем массив
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            mass[i][j]=0 + rand() % 9;  
        }
    }
cout<<endl;
//сортировка
for (i = 0; i <= t ; i++){
j=m;
max=mass[i][0];
while(dl!=0){
    
    if(max<mass[i][j]){
        max=mass[i][j];
        num1=i;
        num2=j;
        stec=mass[i][m];
        mass[i][m]=max;
        mass[num1][num2]=stec;
        }
        dl--;
    }
}
//вывод массива для проверки
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            cout<<mass[i][j]<<",";  
        }
        cout<<endl;
    }
    system("pause");
return 0;
}
Добавлено через 32 минуты
ошибка вышла, 26-27 строка за место m должно быть dl
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2017, 15:02
Ответы с готовыми решениями:

Почему не сортируется массив?
using namespace std; void scan(int * mass) { for( int i = 0; i &lt; 10; i++) { cin &gt;&gt; mass ;...

Почему не сортируется массив?
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() {...

Почему не сортируется массив?
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main(){ int s = 9;...

Почему не сортируется вектор структур?
Выводится ошибка c:\qtsdk\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\stl_algo.h:89: error:...

Почему данная реализация связного списка не сортируется по убыванию?
Сформировать список из вещественных чисел. Упорядочить список по убыванию. почему не сортирует по...

7
lawr
372 / 266 / 478
Регистрация: 09.05.2014
Сообщений: 769
07.06.2017, 15:06 2
а какой именно алгоритм сортировки вы хотели применить? ну и маленькое замечание- итераторы не могут быть равными размерностям, иначе происходит выход за рамки массива.
0
jurok_85
274 / 257 / 190
Регистрация: 21.02.2013
Сообщений: 614
Завершенные тесты: 1
07.06.2017, 15:10 3
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
37
38
39
40
41
#include <iostream>
using namespace std;
 
int main(){
    int i,j,t,dl,m,max,num1,num2,stec,mass[60][60],k;
//вводим длину массива
    cin>>t;
    cin>>m;
    dl=m; // переменная, используемая в сортировке
//заполняем массив
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            mass[i][j]=0 + rand() % 9;
        }
    }
cout<<endl;
//сортировка
for (i = 0; i <= t ; i++){
   for(j = 0; j <= m; j++){
        for(k = j+ 1; k <= m; k++){
                if(mass[i][j]> mass[i][k]){
                    stec = mass[i][j];
                    mass[i][j] = mass[i][k];
                    mass[i][k] = stec;
                }
        }
   }
}
//вывод массива для проверки
for (i = 0; i <= t ; i++)
    {
        for (j = 0; j <= m ; j++){
            cout<<mass[i][j]<<",";
        }
        cout<<endl;
    }
    //system("pause");
return 0;
 
}
вот так попробуй. сильно код твой не разбирал. стиль в циклах плоховат - for (i = 0; i <= t ; i++), обычно если t это размер и отсчет с нуля начинаешь то лучше for (i = 0; i < t ; i++). а то в твоей программе заполняешь массив на 3 элемента а заполнится на 4
1
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
07.06.2017, 15:15  [ТС] 4
я не знаю как он называется, но сейчас объясню.
допустим есть одномерный массив, в котором 4 элемента, в нем мы ищем максимум и меняем его с последним местами, затем ищем максимум среди 3 элементов и перемещаем, затем в 2, получается после перемещения я беру все кроме последнего и так после каждого перемещения.
писал программу на эту сортировку с одномерным массивом, работает, затем хотел сделать тоже самое, но с 2-ым массивом, но он не сортирует.
на счет итераторов не совсем понял, это вы по поводу dl и m?
0
anapshy
196 / 197 / 175
Регистрация: 14.11.2016
Сообщений: 765
Завершенные тесты: 3
07.06.2017, 15:17 5
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
#include <iostream>
#include <ctime>
#include <cstdlib>
int main(void) {
    int t , m, mass[60][60];            // Объявления
    srand(time(NULL));
    std::cin >> t >> m;                 // Размеры матрицы
    for (size_t i = 0; i <= t; i++)     // Заполняем матрицу
        for (size_t j = 0; j <= m; j++)
            mass[i][j] = 0 + rand() % 9;
    std::cout << std::endl;             // Выводим матрицу
    for (size_t i = 0; i <= t; i++) {
        for (size_t j = 0; j <= m; j++)
            std::cout << mass[i][j] << ",";
        std::cout << std::endl;
    }
    std::cout << std::endl;
    for(size_t n(0); n <= t; n++)       // Сортировка
        for(size_t i(0); i <= m; i++)
            for(size_t j(i+1); j <= m; j++)
                if (mass[n][i] > mass[n][j]) {
                    mass[n][j] += mass[n][i];
                    mass[n][i] = mass[n][j] - mass[n][i];
                    mass[n][j] -= mass[n][i];
 
                }
    for (size_t i = 0; i <= t; i++) {   // Вывод матрицы для проверки
        for (size_t j = 0; j <= m; j++)
            std::cout << mass[i][j] << ",";
        std::cout << std::endl;
    }
    system("pause");
    return 0;
}
0
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
07.06.2017, 15:31  [ТС] 6
спасибо большое! сортировка работает, сейчас буду исправлять свои ошибки.

Добавлено через 10 минут
конечно ваш вариант работает, но почему мой косячный ?
0
jurok_85
274 / 257 / 190
Регистрация: 21.02.2013
Сообщений: 614
Завершенные тесты: 1
07.06.2017, 15:36 7
Цитата Сообщение от Мертон_69 Посмотреть сообщение
конечно ваш вариант работает, но почему мой косячный ?
Цитата Сообщение от Мертон_69 Посмотреть сообщение
j=m;
max=mass[i][0];
while(dl!=0){
if(max<mass[i][j]){
max=mass[i][j];
num1=i;
num2=j;
stec=mass[i][m];
mass[i][m]=max;
mass[num1][num2]=stec;
}
dl--; }
в самом начале здесь j = m, потом num1=i; num2=j; и stec=mass[i][m];
mass[i][m]=max;
mass[num1][num2]=stec;
здесь ни что ни на что не меняется
0
Мертон_69
0 / 0 / 0
Регистрация: 12.09.2016
Сообщений: 13
07.06.2017, 15:58  [ТС] 8
я может и заколебал уже, но хочу сделать свой код работоспособным, не всегда же у других решение брать...вообщем поменял код, он менять начал, но не во всех строках, и не сортирует....
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for (i = 0; i < t ; i++){
j=m;
max=mass[i][0];
while(j!=0){
    
    if(max<mass[i][j]){
        max=mass[i][j];
        num1=i;
        num2=j;
        stec=mass[i][m];
        mass[i][m]=max;
        mass[num1][num2]=stec;
        }
        j--;
    }
}
Добавлено через 15 секунд
0
07.06.2017, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2017, 15:58

Массив не сортируется
Здравствуйте. Программа не сортирует массив, не могу разобраться в чем проблема. Сортировка...

Не сортируется массив пузырьком
Не получается нормально отсортировать массив( И оператор выбора не работает, когда выбираешь...

Определить время, за которое сортируется массив
Подскажите как узнать время за которое отсортировался массив (mas) Внизу программы где...


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

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

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