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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.86
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
#1

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

27.02.2012, 19:17. Просмотров 3568. Ответов 8
Метки нет (Все метки)

Здравствуйте, вот у меня есть массив array[x, 2]. Какими стандартными методами можно отсортировать весь массив по ячейкам [x, 0]?
Или стандартными методами можно сортировать только контейнеры? Если да, то какой лучше использовать для хранения латинских букв и чисел. И, собственно, как отсротировать.

Добавлено через 40 минут
Нашел Qsort, но как ее приспособить для двумерного массива?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int compare( const void *arg1, const void *arg2 )
{
    if(*(char*)arg1 > *(char*)arg2)  return 1;
    if(*(char*)arg1 < *(char*)arg2) return -1;
    return 0;
}
 
int main(int argc, char *argv[])
{
 
char a[]={'0', '5', '2', '6', '4', '3', '9', '8', '7', '1'};
    qsort(&a, 10, sizeof(char), compare);
    
    for(int i=0; i<10; i++)
    cout << a[i] << endl;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
27.02.2012, 19:22     Сортировка двумерного массива #2
можно например отсортировать двумерный вектор с помощью sort из <algorithm>
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector< std::vector< int > > test;
 
    srand(time(NULL));
 
    for(int i = 0; i < 10; i++)
    {
        test.push_back(std::vector< int > ());
 
        for(int j = 0; j < 2; j++)
        {
            test[i].push_back(rand() % 10 + 1);
 
            std::cout << std::setw(5) << test[i][j];
        }
 
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
 
    std::sort(test.begin(),test.end());
 
    for(int i = 0; i < 10; i++)
    {
        for(int j = 0; j < 2; j++)
            std::cout << std::setw(5) << test[i][j];
 
        std::cout << std::endl;
    }
 
    return 0;
}
IFree Host
Заблокирован
27.02.2012, 19:23     Сортировка двумерного массива #3
Алгоритмы сортировок
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
27.02.2012, 23:00  [ТС]     Сортировка двумерного массива #4
А без векторов если?
R136a1
 Аватар для R136a1
142 / 111 / 15
Регистрация: 14.04.2011
Сообщений: 261
28.02.2012, 00:47     Сортировка двумерного массива #5
Цитата Сообщение от Getter Посмотреть сообщение
А без векторов если?
можно так:
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <algorithm>
 
void mysort(int m[][2], const int size, bool (*)(int, int));
inline bool asc(int a, int b)
{
    return a < b;
}
inline bool des(int a, int b)
{
    return a > b;
}
 
int main()
{
    int m[5][2];
    int choise;
 
    srand(time(NULL));
 
    for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < 2; j++)
        {
            m[i][j] = rand() % 10 + 1;
            std::cout << std::setw(5) << m[i][j];
        }
 
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
 
    do
    {
            std::cout << "1. сортировать по возрастанию"
                      << "\n2. сортировать по убыванию"
                      << std::endl;
 
        std::cin >> choise;
 
    } while(choise < 1 || choise > 2);
 
    if(choise == 1)
        mysort(m,5,des);
    else
        mysort(m,5,asc);
 
    for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < 2; j++)
            std::cout << std::setw(5) << m[i][j];
 
        std::cout << std::endl;
    }
 
    return 0;
}
 
void mysort(int m[][2], const int size, bool (*func)(int, int))
{
    bool work = true;
 
    while(work)
    {
        int change = 0;
 
        for(int i = 0; i < size - 1; i++)
            if((*func)(m[i][0],m[i+1][0]))
            {
                std::swap(m[i][0],m[i+1][0]);
                std::swap(m[i][1],m[i+1][1]);
 
                change++;
            }
 
        if(!change)
            work = false;
    }
}
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
28.02.2012, 08:02     Сортировка двумерного массива #6
Можно сортировать как одномерный массив
Getter
2 / 2 / 0
Регистрация: 09.09.2010
Сообщений: 221
29.02.2012, 18:38  [ТС]     Сортировка двумерного массива #7
Просто мне это в задании из ЕГЭ попоалось, там в ходе решения необходимо отсортировать двумерный массив по первому элементу [n, 0]. Дак мне чем короче, тем лучше.

Добавлено через 1 минуту
Желательно бы стандартными функциями
Xind
275 / 148 / 7
Регистрация: 05.11.2011
Сообщений: 425
Записей в блоге: 1
29.02.2012, 18:44     Сортировка двумерного массива #8
Цитата Сообщение от Getter Посмотреть сообщение
Желательно бы стандартными функциями
ищите по слову qsort()
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.02.2012, 18:45     Сортировка двумерного массива
Еще ссылки по теме:

Сортировка двумерного массива C++
Сортировка двумерного массива C++
Сортировка двумерного массива C++
C++ Сортировка двумерного массива
Сортировка двумерного массива C++

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

Или воспользуйтесь поиском по форуму:
AncinetHero
49 / 49 / 3
Регистрация: 22.05.2011
Сообщений: 326
29.02.2012, 18:45     Сортировка двумерного массива #9
Ты что, пузырьком сортировать не умеешь? Напиши в чем проблема, а то тебе отвечают по 2 раза, а ты продолжаешь "помогите"
Yandex
Объявления
29.02.2012, 18:45     Сортировка двумерного массива
Ответ Создать тему
Опции темы

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