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

Сортировка самого столбца - C++

Восстановить пароль Регистрация
 
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
12.09.2012, 18:19     Сортировка самого столбца #1
Вообщем возникли затруднения со следующим
Матрица есть,раньше как то делал сортировку столбцов матрицы,а чтобы сами столбцы сортировались оставаясь на своих местах не приходилось,надеюсь поможет кто кодом

Нужно отсортировать САМ столбец по убыванию элементов,и так про каждый столбец.Пример
Исходная
Код
1.33  4.14  2.14  7.44
0.41  8.87     9  1.44
5.53  7.12  3.01  4.45
Отсортированная должна быть так(сам столбец сортируется)

C++ (Qt)
1
2
3
0.41  4.14  2.14  1.44
1.33  7.12  3.01  4.45
5.53  8.87     9  7.44
Заготовка
C++ (Qt)
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
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <ctime> 
#include <iomanip> 
 
using namespace std;
 
int main()
{
    int m,n,i,j,k,temp=0;
    float x;
    
    setlocale(LC_ALL, "RUSSIAN");
    cout<<"\tVvedite razmernost matrix\n";
    cout<<"\nStrok: ";
        cin>>m;
    cout<<"Stolbcov: ";
    cin>>n;
    float **a=new float*[m];
    float *b=new float[m*n];
    for(i=0;i<m;i++)                       
    {
            a[i]=new float[n];
    }
    cout<<endl<<"\tMatrix\n\n";
    srand(time(NULL));
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
            a[i][j]=(rand() % 10 + 1) / float((rand() % 10 + 1));//числа от a до b рамдомно расположенные в матрице
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl<<"\tSortMatrix\n\n";
 
/*код.......*/
 
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    for(int i = 0; i < m; i++)
                {
                    delete [] a[i];
                }
                delete [] a;
    getch();
    return 0;
}
По идее в голову идет следующий алгоритм
1)Выписать столбец в одномерный массив
2)Упорядочить масив по убыванию
3)Записать полученный масив как столбец
4)Взять следующий столбец матрицы

Если это верно то на деле пока не получается реализовать,мож поможет кто кодом))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2012, 18:19     Сортировка самого столбца
Посмотрите здесь:

Файлы: отсортировать и найти самого младшего и самого страшего с правами и без прав C++
Дана строка содержащая текст. Найти длину самого короткого и самого длинного слова. C++
Дана строка, содержащая текст. Найти длину самого короткого и самого длинного слова. C++
Найти длину самого короткого и самого длинного слова. C++
Разработать программу, осуществляющую поиск самого короткого и самого длинного слова во вводимом тексте C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
12.09.2012, 18:37     Сортировка самого столбца #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
int main() {
   std::size_t size = 5;
   int **array = new int *[ size ];
   int temp;
   bool flag = true;
   
   for ( std::size_t i = 0; i < size; i++ ) {
      array[ i ] = new int [ size ];
      
      for ( std::size_t j = 0; j < size; j++ )
         std::cout << ( array[ i ][ j ] = std::rand() % ( size + size )) << ' ';
      
      std::cout << std::endl;
   }
   
   std::cout << std::endl;
   
   for ( std::size_t i = 0; i < size; i++ ) {
      flag = true;
      
      for ( std::size_t lowBorder = size, curPos; flag; lowBorder-- ) {
         for ( curPos = 1, flag = false; curPos < lowBorder; curPos++ ) {
            if ( array[ curPos ][ i ] < array[ curPos - 1 ][ i ]) {
               temp = array[ curPos ][ i ];
               array[ curPos ][ i ] = array[ curPos - 1 ][ i ];
               array[ curPos - 1 ][ i ] = temp;
               flag = true;
            }
         }
      }
   }
   
   
   for ( std::size_t i = 0; i < size; i++ ) {
      for ( std::size_t j = 0; j < size; j++ )
         std::cout << array[ i ][ j ] << ' ';
      
      std::cout << std::endl;
   }
 
   return 0;
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
12.09.2012, 18:44     Сортировка самого столбца #3
a.n.o.n.i.m, через доп массив конечно можно, но можно и так:
C++
1
2
3
4
5
 for (int l=0; l<m; l++) 
   for (i=0; i<m; i++)
    for (j=0; j<m; j++)
      if (a[i][l]<a[j][l])
       swap(a[i][l],a[j][l]);
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
12.09.2012, 18:56     Сортировка самого столбца #4
бгг.
на все случаи жизни
в данном примере в функцию arraySort можно передавать каждый столбец матрицы.
все там весьма примитивно. даже сортир пузырьковый


надо же пиарить тему свою
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
12.09.2012, 18:59     Сортировка самого столбца #5
co6ak, как Вы собираетесь передавать столбец в функцию, если его элементы расположены в разных выделенных частях памяти?
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
12.09.2012, 19:03     Сортировка самого столбца #6
вариант (из первичного кода):
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
#include "stdafx.h"
#include <iostream>
#include <locale.h>
#include <conio.h>
#include <ctime> 
#include <iomanip> 
 
using namespace std;
 
int main()
{
    int m,n,i,j,k,temp;
    float x;
    
    setlocale(LC_ALL, "RUSSIAN");
    cout<<"\tVvedite razmernost matrix\n";
    cout<<"\nStrok: ";
        cin>>m;
    cout<<"Stolbcov: ";
    cin>>n;
    float **a=new float*[m];    
    for(i=0;i<m;i++)                       
    {
            a[i]=new float[n];
    }
    cout<<endl<<"\tMatrix\n\n";
    srand(time(NULL));
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
            a[i][j]=(rand() % 10 + 1) / float((rand() % 10 + 1));//числа от a до b рамдомно расположенные в матрице
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl<<"\tSortMatrix\n\n";
    for(i=0; i<n; i++)
    {
        for(j=0; j<m-1; j++)
        {
            temp=j;
            for(k=j+1; k<m; k++)
                if(a[temp][i]>a[k][i])
                    temp=k;
            x=a[j][i]; a[j][i]=a[temp][i]; a[temp][i]=x;
        }
    }
 
 
 
    for(i=0;i<m;i++)                        
    {
        for (j=0;j<n;j++)                  
        {
             cout << setw(4) <<setprecision(2) <<a[i][j]<<" ";
        }
        cout<<endl;
    }
    for(i = 0; i < m; i++)
                {
                    delete [] a[i];
                }
                delete [] a;
    getch();
    return 0;
}
ProNoooob
71 / 71 / 6
Регистрация: 14.10.2009
Сообщений: 121
12.09.2012, 19:20     Сортировка самого столбца #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
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
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <functional>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
float **matrix;
int rows, columns;
 
float **BuildMatrix(int _rows, int _columns);
void    PrintMatrix(float **_matrix, int _rows, int _columns);
 
int main()
{
    srand(GetTickCount());
 
    printf("Universal matrix column sorting programm.\n");
    printf("Enter Matrix data.\n");
    printf("rows num: ");
    scanf("%d", &rows);
    printf("columns num: ");
    scanf("%d", &columns);
    printf("Building matrix %dx%d ...\n\n", rows, columns);
    matrix = BuildMatrix(rows, columns);
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\nSorting columns ... \n\n");
 
    for(int i = 0; i < rows; i++)
    {
        std::sort(&matrix[i][0], &matrix[i][columns], std::less<float>());
    }
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\n");
    system("pause");
 
    return 0;
}
 
float **BuildMatrix(int _rows, int _columns)
{
    float **matrix;
 
    matrix = new float *[_rows];
 
    for(int i = 0; i < _rows; i++)
    {
        matrix[i] = new float[_columns];
 
        for(int k = 0; k < _columns; k++)
        {
            matrix[i][k] = (rand() % 10 + 1) / float((rand() % 10 + 1));
        }
    }
    return matrix;
}
 
void PrintMatrix(float **_matrix, int _rows, int _columns)
{
    for(int i = 0; i < _columns; i++)
    {
        for(int k = 0; k < _rows; k++)
        {
            printf("%.2f ", matrix[k][i]);
        }
 
        printf("\n");
    }
}
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
12.09.2012, 19:27  [ТС]     Сортировка самого столбца #8
Мужики,прям порадовали,спасибо,столько ответов пасиб кто помог,будем дальше продолжать ,это только начало))
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
18.09.2012, 14:27  [ТС]     Сортировка самого столбца #9
Можете еще раз помочь сделать,написать сортировку выбором и пузырьком тоесть 2 функции добавить в одной будет выбором во второй пузырьком?

Добавлено через 15 минут
и кстате сортировка то по не возрастанию(тоесть убыванию),во всех примерах наоборот
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.09.2012, 14:28     Сортировка самого столбца #10
Цитата Сообщение от ProNoooob Посмотреть сообщение
Просто берем и сортируем столбцы. ^_^
И да отучайтесь писать код как в первом посте.

Если бы я был студентом, то в этой задаче написал бы свой итератор. Чтобы пожоще было.
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <algorithm>
#include <functional>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
 
float **matrix;
int rows, columns;
 
float **BuildMatrix(int _rows, int _columns);
void    PrintMatrix(float **_matrix, int _rows, int _columns);
 
int main()
{
    srand(GetTickCount());
 
    printf("Universal matrix column sorting programm.\n");
    printf("Enter Matrix data.\n");
    printf("rows num: ");
    scanf("%d", &rows);
    printf("columns num: ");
    scanf("%d", &columns);
    printf("Building matrix %dx%d ...\n\n", rows, columns);
    matrix = BuildMatrix(rows, columns);
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\nSorting columns ... \n\n");
 
    for(int i = 0; i < rows; i++)
    {
        std::sort(&matrix[i][0], &matrix[i][columns], std::less<float>());
    }
 
    PrintMatrix(matrix, rows, columns);
 
    printf("\n");
    system("pause");
 
    return 0;
}
 
float **BuildMatrix(int _rows, int _columns)
{
    float **matrix;
 
    matrix = new float *[_rows];
 
    for(int i = 0; i < _rows; i++)
    {
        matrix[i] = new float[_columns];
 
        for(int k = 0; k < _columns; k++)
        {
            matrix[i][k] = (rand() % 10 + 1) / float((rand() % 10 + 1));
        }
    }
    return matrix;
}
 
void PrintMatrix(float **_matrix, int _rows, int _columns)
{
    for(int i = 0; i < _columns; i++)
    {
        for(int k = 0; k < _rows; k++)
        {
            printf("%.2f ", matrix[k][i]);
        }
 
        printf("\n");
    }
}
и отучайтесь использовать глобальные переменные, ога
a.n.o.n.i.m
137 / 137 / 15
Регистрация: 26.02.2011
Сообщений: 492
18.09.2012, 14:31  [ТС]     Сортировка самого столбца #11
а нет верно вроде все,тупанул,просто сортировки нужны

Добавлено через 1 минуту
Глобальные переменные не использую никогда,и где здесь сортировка первая и где вторая?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 15:17     Сортировка самого столбца
Еще ссылки по теме:

C++ Число. Вывести только цифры самого младшего и самого старшего разряда
Верно ли, что вес самого тяжелого человека из группы превышает массу самого легкого более чем в 2 раза? C++
Определить координаты самого нижнего и самого правого из отрицательных элементов матрицы C++

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

Или воспользуйтесь поиском по форуму:
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
18.09.2012, 15:17     Сортировка самого столбца #12
возможные ошибки поправишь. компиль не съест мой код
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
 
void matrPrint      ( flaot **, int, int );
void matrSortBubl   ( flaot **, int, int );
void matrSortChng   ( flaot **, int, int );
void matrRandom     ( flaot **, int, int );
 
int main() {
    srand( time ( 0 ) );
    int row;
    int column;
    float **matrix;
    
    
    std::cout << "\nEnter number of rows: ";
    std::cin >> row;
    std::cout << "\nEnter number of columns: ";
    std::cin >> column;  
 
    matrix = new int* [ row ];
    for ( int i = 0; i < row; i ++ )
        matrix[i] = new int [ column ] ;
    matrRandom( matrix, row, column );
    
    matrSortBubl( matrix, row, column );
    matrPrint( matrix, row, column );
    
    
    
    std::cout << "New one";
    
    matrRandom(matrix, row, column );
    matrSortChng( matrix, row, column );
    matrPrint( matrix, row, column );
    
    for ( int i = 0; i < row; i ++ )
       delete [] matrix[i];
    delete [] matrix;
    
    return 0;
}
 
 
void matrRandom( float ** matr, int row, int column )
{
    for ( int i = 0; i < row; i ++ )
        for ( int j = 0; j < column; j ++ )
            matr[i][j] = (std::rand() % 50 - std::rand() % 25) / std::rand() % 10;
    matrPrint( matr, row, column );
}
 
void matrSortBubl( float **matr, int row, int column )
{
    float tmp;
    for ( int i = 0; i < column; i ++ )
    {
        for ( int j = 0; j < row - 1; j ++ )
            if (  matr[i][j + 1] > matr[i][j] ) 
            {
                tmp = matr[i][j+1];
                matr[i][j+1] = matr[i][j];
                matr[i][j] = tmp;
            }
    }
}
void matrSortChng( float **matr, int row, int column ) {
    float tmp;
    for ( int l = 0; k < column; k ++ ) {
        for(int i = 0; i < row-1; i++){
            int min = i;
            for (int j = i + 1;j < row; j++){
                if( matrix[j][l]< matrix[j][min])
                    min=j;
            }
        matrix[i][l] = matrix[min][l]);
        }
    }
}
 
void matrPrint ( float **matrix, int row, int column )
{
    std::cout << std::endl;
    for ( int i = 0; i < row; i ++ )
    {
        for ( int j = 0; j < column; j ++ )
            std::cout << matrix[i][j] << "\t";
        std::cout << std::endl;
    }
}
Yandex
Объявления
18.09.2012, 15:17     Сортировка самого столбца
Ответ Создать тему

Метки
матрица, Сортировка "пузырьком", Сортировка выбором, столбец, убыванию
Опции темы

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