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

функция сортировки двумерного массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Fengtu
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 9
18.12.2012, 19:00     функция сортировки двумерного массива #1
необходимо написать функцию сортирующую двумерный массив.
за основу взял сортировку при помощи указателей типа:
C++
1
2
3
4
    for (int g=0; g<n*m; g++)
        for (int p=0; p<(n*m-1); p++)
            if ( *(*arr+p)>*(*arr+p+1) )
                swap( *(*arr+p),*(*arr+p+1) );
которую и попытался запихнуть в функцию:

C++
1
2
3
4
5
6
7
void sort(int *, int); // прототип
 
void sort(int *mas, int dlin) // функция
{   for(int i=0; i<dlin; i++)
        for(int j=0; j<dlin-1; j++)
            if ( *(*mas+j)>*(*mas+j+1) ) swap( *(*mas+j),*(*mas+j+1) );
}
VS Выдает ошибку: "операнд * должен быть указателем. Подскажите плз, в чем дело и как править?


Кликните здесь для просмотра всего текста

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
#include <iostream>
 
using namespace std;
const int n=4, m=5;
 
void disp(int [][m], int);
void sort(int *, int);
 
void main()
{   int mat[n][m]={0};
 
    for (int i=0; i<n*m; i++)
        *(*mat+i)=0+rand()%9;
 
    disp(mat,m);
    cout<<endl<<endl;
    sort(*mat, n*m);
    cout<<endl<<endl;
    disp(mat,m);
 
    system("pause");
}
 
void disp(int mas[][m], int dlin)
{   for( int i=0; i<n; i++)
    {   for(int j=0; j<m; j++)
            cout<<mas[i][j]<<" ";
        cout<<endl;
    }
}
 
void sort(int *mas, int dlin)
{   for(int i=0; i<dlin; i++)
        for(int j=0; j<dlin-1; j++)
            if ( *(*mas+j)>*(*mas+j+1) ) swap( *(*mas+j),*(*mas+j+1) );
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
18.12.2012, 19:42     функция сортировки двумерного массива #2
Я бы воспользовался стандартной std::sort. К примеру:
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 <algorithm>
#include <ctime>
 
int main()
{
    std::srand(unsigned(time(0)));
 
    const size_t rows = 5;
    const size_t cols = 3;
    int matrix[rows][cols];
    std::for_each(matrix[0], matrix[0]+rows*cols, [](int& val){val = rand()%99;});
 
    for (size_t i = 0; i<rows; ++i)
    {
        for (size_t j = 0; j<cols; ++j)
            std::cout<<matrix[i][j]<<" ";
        std::cout<<"\n";
    }
 
    std::sort(matrix[0], matrix[0]+rows*cols);
 
    std::cout<<"\n";
    for (size_t i = 0; i<rows; ++i)
    {
        for (size_t j = 0; j<cols; ++j)
            std::cout<<matrix[i][j]<<" ";
        std::cout<<"\n";
    }
 
    std::cout<<"\n";
    system("pause");
    return 0;
}
Fengtu
0 / 0 / 0
Регистрация: 12.12.2012
Сообщений: 9
19.12.2012, 02:01  [ТС]     функция сортировки двумерного массива #3
спасибо за ответ, но все же хотелось бы узнать в чем состоит моя ошибка и как можно выкрутится в рамках исходного метода сортировки.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,904
Записей в блоге: 2
Завершенные тесты: 1
19.12.2012, 10:52     функция сортировки двумерного массива #4
Цитата Сообщение от Fengtu Посмотреть сообщение
спасибо за ответ, но все же хотелось бы узнать в чем состоит моя ошибка и как можно выкрутится в рамках исходного метода сортировки.
Вы работаете с mas, как с двойным указателем.
Yandex
Объявления
19.12.2012, 10:52     функция сортировки двумерного массива
Ответ Создать тему
Опции темы

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