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

Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
24.11.2014, 17:09     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #1
нужно отсортировать отсортировать элементы столбцов двумерного массива, стоящих на четных позициях, по убыванию.

помогите, пожалуйста)
как отсортировать столбцы двумерного массива по убыванию, я понимаю. но мне нужно отсортировать только некоторые.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 17:09     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях
Посмотрите здесь:

Найти сумму четных элементов массива, стоящих на четных местах C++
C++ Не работает быстрая сортировка для двумерного массива
Вычислить и вывести произведение первых 7 элементов массива и сумму следующих 7 элементов находящихся на четных позициях C++
C++ Вывод элементов массива, стоящих на четных позициях, а затем – на нечетных
Вычислить количество элементов массива, стоящих на четных и нечетных позициях C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
24.11.2014, 17:12     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #2
Проверяете номер стоблца на четность. о_О

Добавлено через 43 секунды
А если нужно все чётные в одну сортировку - в отдельный массив и сортируем.
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
24.11.2014, 17:16     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #3
Vector использовать можно ?
в задании матрица или размерность каждого столбца произвольная ?
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
24.11.2014, 17:43  [ТС]     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #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
//сортировка столбцов
void quicksort_colum(int **matr, int j, int first, int last)
// j - номер сортируемого столбца
{
    int mid, count;
    int f=first, l=last;
    mid = matr [(f+l) / 2][j]; //вычисление опорного элемента
    do
    {
        while (matr [f][j] > mid) f++;
        while (matr [l][j] < mid) l--;
        if (f<=l) //перестановка элементов
        {
            count = matr[f][j];
            matr [f][j]=matr [l][j];
            matr [l][j]=count;
            f++;
            l--;
        }
    } while (f<l);
 
    if (first<l) quicksort_colum(matr, j, first, l);
    if (f<last) quicksort_colum(matr, j, f, last);
}
а это вызов:
C++
1
2
3
4
5
6
7
8
9
10
11
// Создание двумерного массива
    int ** Matric = new int * [intRow];
    for (int i=0; i < intRow; i++){
        Matric [i] = new int [intColum];
        for (int j=0; j < intColum; j++){
            Matric [i][j] = 1 + rand()%100;
        }
    }
 
for (int j=0; j < intColum; j++)
    quicksort_colum(Matric, j, 0, intRow-1);
Добавлено через 6 минут
Цитата Сообщение от Тамика Посмотреть сообщение
Проверяете номер стоблца на четность. о_О

Добавлено через 43 секунды
А если нужно все чётные в одну сортировку - в отдельный массив и сортируем.
нет, надо выполнить сортировку не четных столбцов, а элементов столбцов, стоящих на четных позициях в столбцах.
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
24.11.2014, 17:50     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #5
Цитата Сообщение от Galateo Посмотреть сообщение
нет, надо выполнить сортировку не четных столбцов, а элементов столбцов, стоящих на четных позициях в столбцах.
Щито ? оО
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
24.11.2014, 17:59  [ТС]     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #6
Цитата Сообщение от Zazy Посмотреть сообщение
Щито ? оО
дана матрица:
23 45
34 56
12 23
50 89
67 89
78 90
98 13
34 99

должна получиться:
23 45
78 99
12 23
50 90
67 89
34 89
98 13
34 56
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
24.11.2014, 18:00     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #7
Цитата Сообщение от Galateo Посмотреть сообщение
должна получиться:
Так а где ж тут отсортировано-то?..
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
24.11.2014, 18:08  [ТС]     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #8
Цитата Сообщение от Тамика Посмотреть сообщение
Так а где ж тут отсортировано-то?..
по убыванию отсортированы элементы, стоящие на четных местах.

Добавлено через 1 минуту
т.е. был массив
34 50 78 34
стал
78 50 34 34

то же самое со вторым столбцом
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,538
Записей в блоге: 27
24.11.2014, 18:22     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #9
Цитата Сообщение от Galateo Посмотреть сообщение
по убыванию отсортированы элементы, стоящие на четных местах.
Аааа, понятно. В каждом столбце отсортировать элементы на четных позициях?
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
24.11.2014, 18:35  [ТС]     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #10
Цитата Сообщение от Тамика Посмотреть сообщение
Аааа, понятно. В каждом столбце отсортировать элементы на четных позициях?
да, верно
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
24.11.2014, 22:27     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #11
Форматирование сами попробуйте прикрутить.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
void print_matrix(int **matrix, const int SIZE);
void quicksort(int *arr, int first, int last);
void matrix_inner(int **matrix, const int SIZE);
 
using namespace std;
 
int main()
{
    int SIZE = 0;
    cout << "Enter size matrix: ";
    cin >> SIZE;
    
    int **matrix = new int*[SIZE];
    for (int i = 0; i < SIZE; i++)
        matrix[i] = new int[SIZE];
    srand(time(NULL));
    
    for (int i = 0; i < SIZE; i++)
        for (int j = 0; j < SIZE; j++)
            matrix[i][j] = rand() % 100;
    cout << "Source matrix.\n";
    print_matrix(matrix, SIZE);
    cout << "==============\n";
    cout << "Sorted matrix.\n";
    matrix_inner(matrix, SIZE);
    print_matrix(matrix, SIZE);
 
 
    for (int i = 0; i < SIZE; i++)
        delete[]matrix[i];
    delete[]matrix;
    system("pause");
    return 0;
 
}
 
void print_matrix(int **matrix, const int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
            cout << matrix[i][j] << ' ';
        cout << endl;
    }
}
 
void matrix_inner(int **matrix, const int SIZE)
{
  int ttt = SIZE / 2;
    int * temp_arr = new int[ttt];
    for (int i = 0; i < SIZE; i++)
    {
      for (int j = 0; j < SIZE; j++)
            if ((j + 1) % 2 == 0)
                temp_arr[j / 2] = matrix[j][i];
 
      quicksort(temp_arr, 0, SIZE / 2 - 1);
          
      for (int l = 0; l < SIZE; l++)
            if ((l + 1) % 2 == 0)
                matrix[l][i] = temp_arr[l/2];
    }
    delete[] temp_arr;
}
 
void quicksort(int *arr, int first, int last)
{
    int mid, count;
    int f = first, l = last;
    mid = arr[l / 2];
    do
    {
        while (arr[f]>mid) f++;
        while (arr[l]<mid) l--;
        if (f <= l)
        {
            count = arr[f];
            arr[f] = arr[l];
            arr[l] = count;
            f--;
            l++;
        }
    } while (f >= l);
    if (first>l) quicksort(arr, f, last);
    if (f>last) quicksort(arr, first, l);
}
Миниатюры
Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях  
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
26.11.2014, 22:55  [ТС]     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #12
Цитата Сообщение от Zazy Посмотреть сообщение
Форматирование сами попробуйте прикрутить.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <ctime>
#include <cstdlib>
 
void print_matrix(int **matrix, const int SIZE);
void quicksort(int *arr, int first, int last);
void matrix_inner(int **matrix, const int SIZE);
 
using namespace std;
 
int main()
{
    int SIZE = 0;
    cout << "Enter size matrix: ";
    cin >> SIZE;
    
    int **matrix = new int*[SIZE];
    for (int i = 0; i < SIZE; i++)
        matrix[i] = new int[SIZE];
    srand(time(NULL));
    
    for (int i = 0; i < SIZE; i++)
        for (int j = 0; j < SIZE; j++)
            matrix[i][j] = rand() % 100;
    cout << "Source matrix.\n";
    print_matrix(matrix, SIZE);
    cout << "==============\n";
    cout << "Sorted matrix.\n";
    matrix_inner(matrix, SIZE);
    print_matrix(matrix, SIZE);
 
 
    for (int i = 0; i < SIZE; i++)
        delete[]matrix[i];
    delete[]matrix;
    system("pause");
    return 0;
 
}
 
void print_matrix(int **matrix, const int SIZE)
{
    for (int i = 0; i < SIZE; i++)
    {
        for (int j = 0; j < SIZE; j++)
            cout << matrix[i][j] << ' ';
        cout << endl;
    }
}
 
void matrix_inner(int **matrix, const int SIZE)
{
  int ttt = SIZE / 2;
    int * temp_arr = new int[ttt];
    for (int i = 0; i < SIZE; i++)
    {
      for (int j = 0; j < SIZE; j++)
            if ((j + 1) % 2 == 0)
                temp_arr[j / 2] = matrix[j][i];
 
      quicksort(temp_arr, 0, SIZE / 2 - 1);
          
      for (int l = 0; l < SIZE; l++)
            if ((l + 1) % 2 == 0)
                matrix[l][i] = temp_arr[l/2];
    }
    delete[] temp_arr;
}
 
void quicksort(int *arr, int first, int last)
{
    int mid, count;
    int f = first, l = last;
    mid = arr[l / 2];
    do
    {
        while (arr[f]>mid) f++;
        while (arr[l]<mid) l--;
        if (f <= l)
        {
            count = arr[f];
            arr[f] = arr[l];
            arr[l] = count;
            f--;
            l++;
        }
    } while (f >= l);
    if (first>l) quicksort(arr, f, last);
    if (f>last) quicksort(arr, first, l);
}
спасибо большое

только в самой функции быстрой сортировки ошибка:
формула для компоранда, т.е. среднего элемента, следующая:
mid = arr[(f + l) / 2];
Zazy
 Аватар для Zazy
37 / 37 / 11
Регистрация: 14.04.2013
Сообщений: 167
27.11.2014, 01:01     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #13
arr[(f + l) / 2] нахождение опорного элемента, f - начало, l - конец , в данном случае сортировка всегда будет с начала т.е. f = 0 и смысла в нем нету.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.11.2014, 23:05     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях
Еще ссылки по теме:

C++ Быстрая сортировка двумерного массива
Быстрая сортировка двумерного массива C++
C++ Найти количество нулевых элементов массива, расположенных на четных позициях

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

Или воспользуйтесь поиском по форуму:
Galateo
 Аватар для Galateo
0 / 0 / 0
Регистрация: 27.12.2013
Сообщений: 9
27.11.2014, 23:05  [ТС]     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях #14
Цитата Сообщение от Zazy Посмотреть сообщение
arr[(f + l) / 2] нахождение опорного элемента, f - начало, l - конец , в данном случае сортировка всегда будет с начала т.е. f = 0 и смысла в нем нету.
а как же рекурсивная функция, в которую в качестве аргумента first передается измененное значение f?
ведь это f далеко не равно нулю.
C++
1
if (first>l) quicksort(arr, f, last);
Добавлено через 11 минут
и да, я немного не понимаю еще одно место.
как l, т.е. правый, или последний индекс, может быть меньше первого first?
условие first>l никогда не будет истинным, и данная рекурсивная функция quicksort(arr, f, last) не выполнится..
объясните этот момент, пожалуйста
Yandex
Объявления
27.11.2014, 23:05     Быстрая сортировка элементов столбцов двумерного массива, стоящих на четных позициях
Ответ Создать тему
Опции темы

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