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

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

Восстановить пароль Регистрация
 
slavik
0 / 0 / 0
Регистрация: 11.09.2011
Сообщений: 15
11.09.2011, 17:40     Сортировка многомерного массива. #1
Здравствуйте!
Помогите пожалуйста с решением такой задачи. Я еще совсем новичок.

Создать двухмерный динамический массив, вывести его на экран, отсортировать, и вывести на экран отсортированный. Сортировку осуществить с помощью функции.
Второй день вожусь. Сортирует только первую строку.
Укажите пожалуйста на мои ошибки и помогите с решением этой задачи. (не шаблоны, не классы не использовать).
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
#include<iostream>
#include<iomanip>
using namespace std;
void BubbleSort(int[], int);
int main()
{
    int N,M;
    cout<<"Enter N:";
    cin>>N;
    cout<<"Enter M:";
    cin>>M;
    int**mas=new int*[N];
    for(int i=0;i<N;i++)
    {
        mas[i]=new int[M];
    }
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            mas[i][j]=rand()%100;
            cout<<setw(2)<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            BubbleSort( *mas,M);
        }
    }
    cout<<"\n\n";
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            cout<<setw(2)<<mas[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<"\n\n";
    for(int i=0;i<N;i++)
    {
        delete[](mas[i]);
    }
    delete[]mas;
    system("pause");
    return 0;
}   
void BubbleSort(int mas[], int M)
{
    
    for(int i=0; i<M; i++)
    {
        for(int j=M-1; j>i; j--)
        {
            if(mas[j]<mas[j-1])
            {
                int c=mas[j-1];
                mas[j-1]=mas[j]; 
                mas[j]=c;
            }
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 17:40     Сортировка многомерного массива.
Посмотрите здесь:

Создание динамического многомерного массива со списком C++
C++ Возвращение многомерного массива из функции
C++ максимальное значение МНОГОМЕРНОГО массива
Создание динамического многомерного массива C++
Cоздание многомерного массива - из 3х3 массива сделать 4х3 C++
Заполнение многомерного массива и его вывод C++
Return многомерного массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
11.09.2011, 18:04     Сортировка многомерного массива. #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
43
44
45
46
47
48
49
50
51
52
53
#include <iostream>
#include <iomanip>
 
using namespace std;
 
void BubbleSort(int[], int);
 
int main(int argc, char ** argv)
{
    const int n = 4;
    const int m = 5;
    int **array = new int*[n];
    for(int i = 0; i < n; i++)
        array[i] = new int[m];
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
        {
            array[i][j] = rand() % 100;
            cout << setw(3) << array[i][j];
        }
        cout << endl;
    }
    cout << "__________\n";
    for(int i = 0; i < n; i++)
        BubbleSort(array[i], m);
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            cout <<  setw(3) << array[i][j];
        cout << endl;
    }
    delete [] array;
    system("pause");
    return 0;
}
 
void BubbleSort(int a[], int n)
{
    bool sort = true;
    while (sort)
    {
        sort = false;
        for(int i = 0; i < n -1; i++)
            if (a[i] > a[i + 1])
            {
                int b = a[i];
                a[i] = a[i + 1];
                a[i + 1] = b;
                sort = true;
            }
    }
}
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
11.09.2011, 18:17     Сортировка многомерного массива. #3
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
#include <cstdio>
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
 
void BubbleSort(int[], int);
 
int main()
{
    srand(static_cast<unsigned int>(time(NULL)));
    int N,M;
 
    // считывание размеров матрицы;
    std::cout << "Enter N:";
    std::cin >> N;
    std::cout << "Enter M:";
    std::cin >> M;
 
    // выделение памяти под массив;
    int** mas  =  new int*[N];
    for  (int i = 0; i < N; i++)
        mas[i] = new int[M];
 
    // вывод массив на экран;
    std::cout << std::endl << "Under sorting:" << std::endl;
    for(int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout << std::setw(2) << (mas[i][j] = rand() % 100)  <<  " ";
        std::cout << std::endl;
    }
 
    // сортировка матрицы;
    for (int i = 0; i < N; i++)
        BubbleSort(mas[i], M);
 
    // вывод сортированной матрицы;
    std::cout << std::endl << "After sorting:" << std::endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout <<  std::setw(2) << mas[i][j] <<  " ";
        std::cout  <<  std::endl;
    }
    std::cout  <<  std::endl;
 
    // освобождение памяти, выделенной под матрицу;
    for (int i = 0; i < N; i++)
        delete[](mas[i]);
    delete[]mas;
 
    std::getchar();
    return EXIT_SUCCESS;
}
 
 
void BubbleSort(int* mas, int M)
{
    bool swaps = true;
    int iter = 0;
    while (swaps)
    {
        swaps = false;
        for (int i = 0; i < M - iter -1; ++i)
            if (mas[i] > mas[i + 1])
            {
                swaps = true;
                std::swap(mas[i], mas[i + 1]);
            }
        ++iter;
    }
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
11.09.2011, 18:23     Сортировка многомерного массива. #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
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
int cmp_ascendant(const void * a, const void * b){
    return *(int*)a - *(int*)b;
}
 
int sort_matrix(int ** matrix, int rows, int columns){
    int * tmp, i;
    
    if ( ! ( tmp = malloc(sizeof(int) * rows * columns) ) ){
        perror("malloc");
        return -1;
    }
    
    for ( i = 0; i < rows; ++i )
        memcpy(tmp + columns * i, matrix[i], columns * sizeof(int));
    
    qsort(tmp, rows * columns, sizeof(int), cmp_ascendant);
    
    for ( i = 0; i < rows; ++i )
        memcpy(matrix[i], tmp + columns * i, columns * sizeof(int));
    
    free(tmp);
    
    return 0;
}
 
void random_fill_matrix(int ** matrix, int rows, int columns, int top){
    int i, j;
    
    for ( i = 0; i < rows; ++i )
        for ( j = 0; j < columns; ++j )
            matrix[i][j] = rand() % top;
}
 
void dump_matrix(int ** matrix, int rows, int columns, int width){
    int i, j;
    
    for ( i = 0; i < rows; ++i ){
        for ( j = 0; j < columns; ++j )
            printf("%*d", width, matrix[i][j]);
        printf("\n");
    }
}
 
#define TOP 100
#define WIDTH 3
 
int main(void){
    int ** matrix, rows, columns, i;
    
    printf("Rows: ");
    scanf("%d", &rows);
    printf("Columns: ");
    scanf("%d", &columns);
    
    if ( ! ( matrix = malloc(rows * sizeof(int*)) ) ){
        perror("malloc");
        exit(1);
    }
    for ( i = 0; i < rows; ++i ){
        if ( ! ( matrix[i] = malloc(columns * sizeof(int)) ) ){
            perror("malloc");
            exit(1);
        }
    }
    
    random_fill_matrix(matrix, rows, columns, TOP);
    printf("\nUnsorted:\n");
    dump_matrix(matrix, rows, columns, WIDTH);
    
    if ( sort_matrix(matrix, rows, columns) ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    printf("\nSorted:\n");
    dump_matrix(matrix, rows, columns, WIDTH);
    
    for ( i = 0; i < rows; ++i )
        free(matrix[i]);
    free(matrix);
    
    exit(0);
}
Код
andrew@debnout:~/cpp/numbers$ gcc -o matrix_sort matrix_sort.c
andrew@debnout:~/cpp/numbers$ ./matrix_sort 
Rows: 4
Columns: 10

Unsorted:
 83 86 77 15 93 35 86 92 49 21
 62 27 90 59 63 26 40 26 72 36
 11 68 67 29 82 30 62 23 67 35
 29  2 22 58 69 67 93 56 11 42

Sorted:
  2 11 11 15 21 22 23 26 26 27
 29 29 30 35 35 36 40 42 49 56
 58 59 62 62 63 67 67 67 68 69
 72 77 82 83 86 86 90 92 93 93
slavik
0 / 0 / 0
Регистрация: 11.09.2011
Сообщений: 15
11.09.2011, 18:37  [ТС]     Сортировка многомерного массива. #5
Всем большое спасибо. Буду разбираться, в чем были мои ошибки.
Хочу хорошенько понять тему...
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.09.2011, 08:46     Сортировка многомерного массива. #6
Петррр и sandye51, неправильно сортируете

получается:
Код
  1 2 10
  3 4 20
  5 6 30
а должно быть:
Код
   1  2  3
   4  5  6
  10 20 30
Петррр
 Аватар для Петррр
5923 / 3360 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
12.09.2011, 09:21     Сортировка многомерного массива. #7
Я просто сделал построчную сортировку. Я не знал что автору нужна именно та сортировка о которой говорите Вы.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 09:28     Сортировка многомерного массива.
Еще ссылки по теме:

Внутреннее устройство многомерного массива и неявное преобразование массива в указатель C++
C++ Сортировка многомерного динамического массива
C++ Обработка многомерного массива
C++ Полная явная инициализация многомерного массива
C++ Передача в функцию многомерного массива

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

Или воспользуйтесь поиском по форуму:
co6ak
Кошковед
 Аватар для co6ak
406 / 499 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
12.09.2011, 09:28     Сортировка многомерного массива. #8
всякие глупости с массивами и матрицами
Yandex
Объявления
12.09.2011, 09:28     Сортировка многомерного массива.
Ответ Создать тему
Опции темы

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