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

Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
snoop9x
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 14
18.12.2010, 14:46     Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы #1
Написать функцию, проверяющую по возрастанию или убыванию упорядочена указанная строка двумерного массива. Упорядочить по возрастанию все строки двумерного массива, которые неупорядочены по убыванию.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<stdafx.h>
#include<iostream>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{setlocale( LC_ALL,"Russian" );
const int str=5; 
const int stolb=5; 
int mass[str][stolb]; 
int i,j,a,c,temp,x,z;
cout<<"До сортировки:""\n";
for(i=0;i<str;i++) 
{ 
for(j=0;j<stolb;j++)
{
a=rand()%100;
mass[i][j]=a;
printf ("%4d",mass[i][j]);
}
cout<<"\n";
}
cout<<"\n";
for(c=0;c<=(str*stolb);c++)
{
for(i=0;i<str;i++)
{
for(j=0;j<stolb-1;j++)
{
if(mass[i][j]>mass[i][j+1])
{
temp=mass[i][j];
mass[i][j]=mass[i][j+1];
mass[i][j+1]=temp;
}
}
}
for(x=0;x<stolb;x++)
{
for(z=0;z<str-1;z++)
{
if(mass[z][x]>mass[z][x+1])
{
temp=mass[z][x];
mass[z][x]=mass[z][x+1];
mass[z][x+1]=temp;
}
}
}
}
cout<<"После сортировки:""\n";
for(i=0;i<str;i++)
{
for(j=0;j<stolb;j++)
{
printf ("%4d",mass[i][j]);
}
cout<<"\n";
}
system("pause");
return 0;
}

Препод требует что бы выполнялось второе условие, т.е. упорядочить по возрастанию все строки двумерного массива, которые неупорядочены по убыванию. и не знаю как это сделать.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2010, 14:46     Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы
Посмотрите здесь:

Отсортировать чётные столбцы матрицы по возрастанию, а нечётные – по убыванию C++
Установить упорядочены ли компоненты вектора а по возрастанию или убыванию. C++
Сортировка массива по возрастанию или по убыванию, в зависимости от параметра C++
C++ Определить, упорядочены ли по возрастанию или по убыванию цифры в записи натурального n
Отсортировать массив по убыванию или по возрастанию C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
18.12.2010, 16:29     Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Мальца мутненько, на скору руку, но в целом суть должна быть ясна.
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
        template <class _Tp>
        void quickSort(int left, int right, _Tp* arr, bool (*compare)(const _Tp, const _Tp))
        {
                int i = left, j = right;
                _Tp pivot = arr[(left + right) / 2];
 
                /* partition */
                while (i <= j)
                {
                        while (compare(arr[i], pivot))
                                i++;
                        while (compare(pivot, arr[j]))
                                j--;
                        if (i <= j)
                        {
                                _Tp tmp = arr[i];
                                arr[i] = arr[j];
                                arr[j] = tmp;
                                i++;
                                j--;
 
                        }
                };
 
                /* recursion */
                if (left < j)
                        quickSort(left, j, arr, compare);
                if (i < right)
                        quickSort(i, right, arr, compare);
        }
 
template <class _Tp>
bool is_sorted(int size, _Tp *arr, bool (*compare)(_Tp a, _Tp b))
{
        for (int i=0; i<size-1; i++)
                if (!compare(arr[i], arr[i+1]))
                        return false;
        return true;
}
 
bool sortup(const int a, const int b) { return a<b; }
bool sortdown(const int a, const int b) { return a>b; }
bool sortedup(const int a, const int b) { return a<=b; }
bool sorteddown(const int a, const int b) { return a>=b; }
 
 
int main (int argc, char*  argv[])
{
        srand(static_cast<unsigned int>(time(0)));
        const int str=5;
        const int stolb=10;
        int mass[str][stolb];
 
        for (int i=0; i<str; i++)
        {
                for (int j=0; j<stolb; j++)
                        mass[i][j] = rand()%100;
 
                if (rand()%10>6)
                        quickSort(0, stolb-1, &mass[i][0], sortup);
                else
                if (rand()%10>6)
                        quickSort(0, stolb-1, &mass[i][0], sortdown);
        }
 
        for (int i=0; i<str; i++)
        {
                for (int j=0; j<stolb; j++)
                        cout << setw(3) << mass[i][j];
                cout << endl;
        }
        cout << endl;
 
        for (int i=0; i<str; i++)
                if (is_sorted(stolb, &mass[i][0], sortedup))
                        cout << "Line " << i << " sorted up." << endl;
                else
                if (is_sorted(stolb, &mass[i][0], sorteddown))
                        cout << "Line " << i << " sorted down." << endl;
                else
                {
                        cout << "Line is not sorted. Sorting down." << endl;
                        quickSort(0, stolb-1, &mass[i][0], sortdown);
                }
        cout << endl;
 
        for (int i=0; i<str; i++)
        {
                for (int j=0; j<stolb; j++)
                        cout << setw(3) << mass[i][j];
                cout << endl;
        }
        cout << endl;
        return 0;
}
snoop9x
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 14
18.12.2010, 21:41  [ТС]     Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы #3
void quickSort(int left, int right, _Tp* arr, bool (*compare)(const _Tp, const _Tp))
{
int i = left, j = right;
_Tp pivot = arr[(left + right) / 2];
вот эти строчки я не очень понимаю, не могли бы мне помочь разобраться
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
18.12.2010, 21:50     Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы #4
C++
1
2
3
4
5
template <class _Tp>
void quickSort(int left, int right, _Tp* arr, bool (*compare)(const _Tp, const _Tp))
{
          int i = left, j = right;
          _Tp pivot = arr[(left + right) / 2];
Я объявил quickSort как шаблонную функцию принимающую тип _Tp. Подробнее о шаблонных функциях. Такая функция может сортировать массив любых элементов, для которых определено присваивание и сравнение. Главное, вы смело можете заменить _Tp на int и убрать спецификатор template <class _Tp> без потери функциональности в данном случае.

Функция quickSort для сравнения элементов массива использует функцию, возвращающую true, если первый аргумент меньше второго. Эта функция поставляется в quickSort последним параметром. Меняя эту функцию, я реализую сортировку по убыванию или по возрастанию.

pivot в алгоритме быстрой сортировки -- среднее значение, "вокруг" которого вертится рекурсия.
Yandex
Объявления
18.12.2010, 21:50     Выяснить, по возрастанию или убыванию упорядочена указанная строка матрицы
Ответ Создать тему
Опции темы

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