Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
slavik
0 / 0 / 0
Регистрация: 11.09.2011
Сообщений: 15
1

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

11.09.2011, 17:40. Просмотров 998. Ответов 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
#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;
            }
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2011, 17:40
Ответы с готовыми решениями:

Сортировка многомерного динамического массива
В общем задание создать массив и выполнить сортировку строк по убыванию. Причем...

Внутреннее устройство многомерного массива и неявное преобразование массива в указатель
Букв получилось многовато. Поэтому, чтобы сэкономить Ваше время, предлагаю...

Cоздание многомерного массива - из 3х3 массива сделать 4х3
Создать многомерный массив 4x3 элементов. По данному примеру. Пример. Код...

Обработка многомерного массива
Помогите пожалуйста Известно количество сделанных столов тремя фабриками за...

Return многомерного массива
не понимаю как передавать многомерные массивы в c++. есть массив char arr...

7
Петррр
6160 / 3460 / 897
Регистрация: 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;
            }
    }
}
1
sandye51
программист С++
833 / 592 / 147
Регистрация: 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;
    }
}
1
easybudda
Модератор
Эксперт CЭксперт С++
10092 / 6002 / 1504
Регистрация: 25.07.2009
Сообщений: 11,385
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
1
slavik
0 / 0 / 0
Регистрация: 11.09.2011
Сообщений: 15
11.09.2011, 18:37  [ТС] 5
Всем большое спасибо. Буду разбираться, в чем были мои ошибки.
Хочу хорошенько понять тему...
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
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
0
Петррр
6160 / 3460 / 897
Регистрация: 28.10.2010
Сообщений: 5,926
12.09.2011, 09:21 7
Я просто сделал построчную сортировку. Я не знал что автору нужна именно та сортировка о которой говорите Вы.
0
co6ak
Кошковед
515 / 503 / 63
Регистрация: 12.04.2010
Сообщений: 1,392
12.09.2011, 09:28 8
всякие глупости с массивами и матрицами
0
12.09.2011, 09:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2011, 09:28

Передача в функцию многомерного массива
Как передать в функцию многомерный массив, если неизвестна его размерность. С...

Возвращение многомерного массива из функции
Как вернуть многомерный массив из функции для обычного массива c...

Создание динамического многомерного массива
Esche odin vopros po etoi temie: Kak v C++ sozdat dynamicheskiy MNOGOMERNIY...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru