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

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

Восстановить пароль Регистрация
 
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
01.05.2012, 00:17     Сортировка матрицы по убыванию #1
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");
}
Что то не пойму какое условие нужно((
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 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");
}
Заглядывайте сюда, для вас написано... и, если возможность обращения к элементам двумерного статического массива как к элементам одномерного является для вас сюрпризом, то еще и про адресацию указателей и массивов почитайте.
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
01.05.2012, 23:25  [ТС]     Сортировка матрицы по убыванию #3
Цитата Сообщение от BRcr Посмотреть сообщение
Заглядывайте сюда, для вас написано...
Заглядывал)) те же самые ошибки..http://s019.***********/i621/1205/25/67d6a57edf94.png
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 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;
Кое-что я изменил, чтоб устранить ручной ввод массива, все прозрачно - сами назад пеменяйте
Вот вывод:
Миниатюры
Сортировка матрицы по убыванию  
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 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;
}
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
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;
}
Это я так понимаю пузырьковый метод))
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 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 минуту
Без нее при каждом запуске программы последовательность одна и та же будет. Есть и другие способы сделать это...
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
02.05.2012, 13:56     Сортировка матрицы по убыванию #8
randomize() не стандартная функция, для этого есть srand() в стандартной библиотеке.
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
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;
}
Сделал так.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
02.05.2012, 19:10     Сортировка матрицы по убыванию #10
Нет. srand() нужна для засева случайных чисел. Иначе при каждом запуске они будут одинаковыми. Чаще всего значением для засева берут количество секунд, прошедших с 1 января 1970 года. Их количество возвращает std::time( 0 ). В общем виде все выглядит так:
C++
1
std::srand( std::time( 0 ));
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
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]); матрица заполняется разными числами))
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
02.05.2012, 19:18     Сортировка матрицы по убыванию #12
Цитата Сообщение от Andrew_qb Посмотреть сообщение
что моим srand(num[3][3]);
Ну это, я бы сказал, не правильно. Хотя бы потому, что Вы выходите за границу массива. Хоть и не изменяете ничего там.
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
02.05.2012, 19:25  [ТС]     Сортировка матрицы по убыванию #13
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну это, я бы сказал, не правильно. Хотя бы потому, что Вы выходите за границу массива. Хоть и не изменяете ничего там.
Не совсем понял что значит выхожу за границу массива?
Он на рассчитан на на 9 цифр в диапазоне от 0 - 100 такие числа он и заносит..
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
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 ] тут нет.
Andrew_qb
132 / 132 / 5
Регистрация: 04.06.2011
Сообщений: 551
02.05.2012, 19:34  [ТС]     Сортировка матрицы по убыванию #15
Ок спасибо!
Sobaka_ru
2 / 2 / 0
Регистрация: 16.12.2010
Сообщений: 75
08.10.2014, 11:06     Сортировка матрицы по убыванию #16
Народ, а как сделать через шаблон?
т.е. template <class Type>
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 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;
}
Алгоритмы сортировок
Sobaka_ru
2 / 2 / 0
Регистрация: 16.12.2010
Сообщений: 75
22.10.2014, 11:03     Сортировка матрицы по убыванию #18
А какой это метод сортировки чето я не понял и как это реализовать в main'е?

Добавлено через 17 минут
Т.е. в
C++
1
int main()
вызвать нашу сортировку
C++
1
long long insertSort( T * a, int size )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2014, 20:15     Сортировка матрицы по убыванию
Еще ссылки по теме:

C++ Сортировка массива по убыванию
C++ Сортировка значений столбцов матрицы по убыванию
Отсортировать по убыванию последнюю строку квадратной матрицы (сортировка Шелла) C++

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

Или воспользуйтесь поиском по форуму:
BRcr
 Аватар для BRcr
4003 / 2292 / 155
Регистрация: 03.02.2011
Сообщений: 5,064
Записей в блоге: 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
Yandex
Объявления
22.10.2014, 20:15     Сортировка матрицы по убыванию
Ответ Создать тему
Опции темы

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