Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/47: Рейтинг темы: голосов - 47, средняя оценка - 4.64
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
1

Сортировка матрицы по убыванию

01.05.2012, 00:17. Показов 9253. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
int num[3][3] = {{0}};
 
cout << "Введите 9 чисел:" << "\n\n";
for (int i = 0; i < 3; i++)
   for (int j = 0; j < 3; j++)
      cin >> num[i][j];
 
for (int i = 0; i < 3; i++) 
{
   for (int j = 0; j < 3; j++)
        //if ()
            cout << num[i][j] << ' ';
            cout << "\n";
}
   system ("pause");
}
Что то не пойму какое условие нужно((
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2012, 00:17
Ответы с готовыми решениями:

Сортировка матрицы по убыванию
Люди добрые нужны помощь по c++ (console wizzard) абсолютному чайнику. Вообщем суть задачи...

Сортировка строк матрицы по убыванию
Помогите пожалуйста написать функцию. Например, была матрица 10 11 12 13 20 21 22 23 30 31 32 33...

Сортировка столбцов матрицы по убыванию
дана матрица размером NxM надо отсортировать элементы столбцы в порядке убывание. Ввод данных с...

Сортировка элементов строк матрицы по убыванию
Вот что есть ввод и вывод динамического массива. #include &lt;iostream.h&gt; #include &lt;iomanip.h&gt;...

18
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
01.05.2012, 09:43 2
Вот такое, например, сортировка вставками:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
int main() {
    setlocale(LC_ALL, "rus");
    int num[3][3] = {0};
 
    cout << "Введите 9 чисел:" << "\n\n";
    for (int i = 0; i < 3; i++)
       for (int j = 0; j < 3; j++)
          cin >> num[i][j];
 
    for ( int i = 1, j, tmp; i < sizeof( num ) / sizeof( num[0] ); i++ ) {
        tmp = num[i]; 
        for ( j = i - 1; j >= 0 && num[j] > tmp; j-- ) { 
            num[j + 1] = num[j];  
        }
        num[j + 1] = tmp;    
    }
    system ("pause");
}
Заглядывайте сюда, для вас написано... и, если возможность обращения к элементам двумерного статического массива как к элементам одномерного является для вас сюрпризом, то еще и про адресацию указателей и массивов почитайте.
0
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
01.05.2012, 23:25  [ТС] 3
Цитата Сообщение от BRcr Посмотреть сообщение
Заглядывайте сюда, для вас написано...
Заглядывал)) те же самые ошибки..
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
02.05.2012, 11:09 4
Пардон, моя ошибка - забыл вам один кирпичик из конструктора выдать, приведение типов
Вот так надо:
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
    // setlocale( LC_ALL, "rus" );
    int num[3][3] = {0};
 
    randomize( );
    // cout << "Введите 9 чисел:" << "\n\n";
    for ( int i = 0; i < 3; i++ ) {
        for ( int j = 0; j < 3; j++ ) {
            // cin >> num[i][j];
            num[i][j] = rand( ) % 100;
            cout << num[i][j] << "\t";
        }
        cout << endl;
    }
    int *num_mono = ( int * )num;
    for ( int i = 1, j, tmp; i < sizeof( num ) / sizeof( num[0][0] ); i++ ) {
        tmp = num_mono[i];
        for ( j = i - 1; j >= 0 && num_mono[j] < tmp; j-- ) {
            num_mono[j + 1] = num_mono[j];
        }
        num_mono[j + 1] = tmp;
    }
    cout << endl << endl;
    for ( int i = 0; i < 3; i++ ) {
        for ( int j = 0; j < 3; j++ ) {
            cout << num[i][j] << "\t";
        }
        cout << endl;
    }
    system( "pause" );
    return 0;
Кое-что я изменил, чтоб устранить ручной ввод массива, все прозрачно - сами назад пеменяйте
Вот вывод:
Миниатюры
Сортировка матрицы по убыванию  
1
96 / 748 / 279
Регистрация: 11.04.2012
Сообщений: 971
02.05.2012, 11:29 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
#define N 10
 
int main(void)
{
    int** ppX = new int*[N];
    for (int i = 0; i < N; i++)
    {
        ppX[i] = new int[N];
        for (int j = 0; j < N; j++)
            ppX[i][j] = rand() % (N-1) + 1;
    }
 
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",ppX[z1][z2]);
        printf("\n");
    }
 
    printf("\n");
 
    int d = 0, *pV = new int[N * N];
    for (int q1 = 0; q1 < N; q1++)
        for (int q2 = 0; q2 < N; q2++)
            pV[d++] = ppX[q1][q2];
 
    for (int m1 = 0; m1 < N * N; m1++)
        for (int m2 = m1; m2 < N * N; m2++)
            if (pV[m2] > pV[m1]) {
                int temp = pV[m1];
                pV[m1] = pV[m2];
                pV[m2] = temp;
            }
 
    int x1 = 0, x2 = 0;
    for (int n1 = 0; n1 < N * N; n1++)
    {
        if (x2 >= N) { x2 = 0; x1++; }
        ppX[x1][x2++] = pV[n1];
    }
 
    for (int r1 = 0; r1 < N; r1++)
    {
        for (int r2 = 0; r2 < N; r2++)
            printf("%d ",ppX[r1][r2]);
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
1
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
02.05.2012, 13:30  [ТС] 6
Цитата Сообщение от BRcr Посмотреть сообщение
Пардон, моя ошибка...
Да не чего страшного))
а то что рандомность в принципе без разницы))
а приведение типов я так понимаю это вот эта строчка
Цитата Сообщение от BRcr Посмотреть сообщение
int *num_mono = ( int * )num;
И ещё вопрос, зачем эта строчка?
Цитата Сообщение от BRcr Посмотреть сообщение
randomize( );
Visual studio на неё ругается но прекрасно работает и без неё))

Добавлено через 1 минуту
Цитата Сообщение от zitxbit Посмотреть сообщение
Может быть такой исходник подойдет:
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
#define N 10
 
int main(void)
{
    int** ppX = new int*[N];
    for (int i = 0; i < N; i++)
    {
        ppX[i] = new int[N];
        for (int j = 0; j < N; j++)
            ppX[i][j] = rand() % (N-1) + 1;
    }
 
    for (int z1 = 0; z1 < N; z1++)
    {
        for (int z2 = 0; z2 < N; z2++)
            printf("%d ",ppX[z1][z2]);
        printf("\n");
    }
 
    printf("\n");
 
    int d = 0, *pV = new int[N * N];
    for (int q1 = 0; q1 < N; q1++)
        for (int q2 = 0; q2 < N; q2++)
            pV[d++] = ppX[q1][q2];
 
    for (int m1 = 0; m1 < N * N; m1++)
        for (int m2 = m1; m2 < N * N; m2++)
            if (pV[m2] > pV[m1]) {
                int temp = pV[m1];
                pV[m1] = pV[m2];
                pV[m2] = temp;
            }
 
    int x1 = 0, x2 = 0;
    for (int n1 = 0; n1 < N * N; n1++)
    {
        if (x2 >= N) { x2 = 0; x1++; }
        ppX[x1][x2++] = pV[n1];
    }
 
    for (int r1 = 0; r1 < N; r1++)
    {
        for (int r2 = 0; r2 < N; r2++)
            printf("%d ",ppX[r1][r2]);
        printf("\n");
    }
 
    _getch();
 
    return 0;
}
Это я так понимаю пузырьковый метод))
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
02.05.2012, 13:56 7
Цитата Сообщение от Andrew_qb Посмотреть сообщение
И ещё вопрос, зачем эта строчка?
C++
1
randomize( );
Это инициализация случайной последовательности, генерируемой функцией rand().
Цитата Сообщение от справка билдера
Header File stdlib.h, time.h
Category Math Routines
Prototype
C++
1
void randomize(void);
Description
Initializes random number generator.
randomize initializes the random number generator with a random value.
Return Value None.
Example
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
    int i;
    randomize();
    printf("Ten random numbers from 0 to 99\n\n");
    for(i=0; i<10; i++)
        printf("%d\n", rand() % 100);
    return 0;
}
Добавлено через 1 минуту
Без нее при каждом запуске программы последовательность одна и та же будет. Есть и другие способы сделать это...
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
02.05.2012, 13:56 8
randomize() не стандартная функция, для этого есть srand() в стандартной библиотеке.
1
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
02.05.2012, 19:08  [ТС] 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
#include <iostream>
using namespace std;
int main() {
    // setlocale( LC_ALL, "rus" );
    int num[3][3] = {0};
    srand(num[3][3]); // была randomize( );
    // cout << "Введите 9 чисел:" << "\n\n";
    for ( int i = 0; i < 3; i++ ) {
        for ( int j = 0; j < 3; j++ ) {
            // cin >> num[i][j];
            num[i][j] = rand( ) % 100;
            cout << num[i][j] << "\t";
        }
        cout << endl << "\n";
    }
    int *num_mono = ( int * )num;
    for ( int i = 1, j, tmp; i < sizeof( num ) / sizeof( num[0][0] ); i++ ) {
        tmp = num_mono[i];
        for ( j = i - 1; j >= 0 && num_mono[j] < tmp; j-- ) {
            num_mono[j + 1] = num_mono[j];
        }
        num_mono[j + 1] = tmp;
    }
    cout << endl << endl;
    for ( int i = 0; i < 3; i++ ) {
        for ( int j = 0; j < 3; j++ ) {
            cout << num[i][j] << "\t";
        }
        cout << endl << "\n";
    }
    system( "pause" );
    return 0;
}
Сделал так.
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
02.05.2012, 19:10 10
Нет. srand() нужна для засева случайных чисел. Иначе при каждом запуске они будут одинаковыми. Чаще всего значением для засева берут количество секунд, прошедших с 1 января 1970 года. Их количество возвращает std::time( 0 ). В общем виде все выглядит так:
C++
1
std::srand( std::time( 0 ));
0
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
02.05.2012, 19:16  [ТС] 11
Цитата Сообщение от Toshkarik Посмотреть сообщение
Нет. srand() нужна для засева случайных чисел. Иначе при каждом запуске они будут одинаковыми. Чаще всего значением для засева берут количество секунд, прошедших с 1 января 1970 года. Их количество возвращает std::time( 0 ). В общем виде все выглядит так:
C++
1
std::srand( std::time( 0 ));
Да точно srand(time(0)); матрица заполняется разными числами))
Хотя и моим srand(num[3][3]); матрица заполняется разными числами))
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
02.05.2012, 19:18 12
Цитата Сообщение от Andrew_qb Посмотреть сообщение
что моим srand(num[3][3]);
Ну это, я бы сказал, не правильно. Хотя бы потому, что Вы выходите за границу массива. Хоть и не изменяете ничего там.
0
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
02.05.2012, 19:25  [ТС] 13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну это, я бы сказал, не правильно. Хотя бы потому, что Вы выходите за границу массива. Хоть и не изменяете ничего там.
Не совсем понял что значит выхожу за границу массива?
Он на рассчитан на на 9 цифр в диапазоне от 0 - 100 такие числа он и заносит..
0
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
02.05.2012, 19:30 14
Вы создаете массив 3х3. Элементы массива идут в таком порядке
num[ 0 ][ 0 ] num[ 0 ][ 1 ] num[ 0 ][ 2 ]
num[ 1 ][ 0 ] num[ 1 ][ 1 ] num[ 1 ][ 2 ]
num[ 2 ][ 0 ] num[ 2 ][ 1 ] num[ 2 ][ 2 ]

Как мы видим, num[ 3 ][ 3 ] тут нет.
1
145 / 145 / 35
Регистрация: 04.06.2011
Сообщений: 578
02.05.2012, 19:34  [ТС] 15
Ок спасибо!
0
2 / 2 / 0
Регистрация: 16.12.2010
Сообщений: 73
08.10.2014, 11:06 16
Народ, а как сделать через шаблон?
т.е. template <class Type>
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
08.10.2014, 19:01 17
Пойдет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template < class T >
long long insertSort( T * a, int size )
{
    T tmp;
    long long cnt( 0 );
 
    for ( int i = 1, j; i < size; ++i ) // цикл проходов, i - номер прохода
    {
        tmp = a[ i ];
        for ( j = i - 1; j >= 0 && a[ j ] > tmp; --j )
        { // поиск места элемента в готовой последовательности
            a[ j + 1 ] = a[ j ];
            ++cnt;
        } // сдвигаем элемент направо, пока не дошли
        a[ j + 1 ] = tmp; // место найдено, вставить элемент
        ++cnt;
    }
    return cnt;
}
Алгоритмы сортировок
0
2 / 2 / 0
Регистрация: 16.12.2010
Сообщений: 73
22.10.2014, 11:03 18
А какой это метод сортировки чето я не понял и как это реализовать в main'е?

Добавлено через 17 минут
Т.е. в
C++
1
int main()
вызвать нашу сортировку
C++
1
long long insertSort( T * a, int size )
0
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
22.10.2014, 20:15 19
Это сортировка вставками.
C++
1
2
3
4
5
6
int main()
{
    char arr[] = "58263315";
    insertSort( arr, 8 );
    cout << arr;
}
http://codepad.org/RfgPtqGr
0
22.10.2014, 20:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.10.2014, 20:15
Помогаю со студенческими работами здесь

Сортировка значений столбцов матрицы по убыванию
Всем здравствуйте. Прошу совета-что я делаю не так? Есть программка сортировки значений столбцов...

Сортировка каждой строки матрицы по убыванию до минимального элемента
В матрице найти минимум в каждой строке и отсортировать элементы строки до минимального элемента в...

Сортировка столбцов матрицы по убыванию элементов последней строки
Дан двумерный массив. Нужно произвести сортировку столбцов по убыванию элементов последней строки....

Сортировка четных строк матрицы по возрастанию, а нечетных - по убыванию
Здравствуйте! Есть задача: отсортировать чётные строки массива А по возрастанию, а нечётные по...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru