Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
19 / 18 / 5
Регистрация: 28.04.2010
Сообщений: 86
1

"Быстрая" сортировка двумерного массива

28.04.2010, 14:59. Просмотров 6535. Ответов 3
Метки нет (Все метки)

Помогите пожалуйста!!!
Нужно реализовать "быструю" сортировку для двумерного массива.
Не ругайте, я пока что новичок, для одномерного могу сделать, а для двумерного нет...

Добавлено через 33 минуты
есть у кого какие мысли?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2010, 14:59
Ответы с готовыми решениями:

"Быстрая сортировка" двумерного массива
Задание звучит так: Дана целочисленная квадратная матрица. Упорядочить по убыванию элементы в...

Сортировка двумерного массива методом вставок с "конфеткой"
Доброго времени суток. Помогите разобраться со следующим заданием (в форуме С мне не помогли):...

Чтение двумерного массива вещественных чисел из файла, где числа разделены "," и ";"
Исходный текстовый файл выглядит таким образом: M= Нужно, чтобы массив выглядел следующим...

Быстрая сортировка двумерного массива
Помогите разобраться с быстрой сортировкой! Для одномерного массива всё понятно, но как сортировать...

3
1257 / 795 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
28.04.2010, 15:31 2
1. Перегоняешь в простой массив, сортируешь, потом перегоняешь обратно в матрицу..
2. Если используешь матрицу на стеке: до есть не динамическую,
можно просто сделать следующую махинацию:
C++
1
2
3
4
5
int *p =(int*)matrix;  //указатель p можешь передать  в функцию qsort.
/*Это представление матрицы массивом...
С динамическими матрицами это не прокатывает,
поэтому использовать надо пункт 1.
*/
0
19 / 18 / 5
Регистрация: 28.04.2010
Сообщений: 86
28.04.2010, 16:08  [ТС] 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
#include <iostream>
using namespace std;
 
template<class T> 
void quickSortR(T* a, long N) 
{
    long i = 0, j = N;            
    T temp, p;                    
    p = a[ N>>1 ];
    do {
        while ( a[i] < p ) i++;
        while ( a[j] > p ) j--;
        if (i <= j) 
        {
            temp = a[i]; a[i] = a[j]; a[j] = temp;
            i++; j--;
        }
    } 
    while ( i<=j );
    if ( j > 0 ) quickSortR(a, j);
    if ( N > i ) quickSortR(a+i, N-i);
}
 
int main()
{
    setlocale(0, "Rus");
    int a[] = { 2, 5, 1, 19, 8};
    quickSortR(a, 4);
    for(int i = 0; i < 5; i ++)
        cout << a[i] << " ";
    cout << endl;
    return 0;
}
как я понял, по вашему первому пункту, в этом коде в начале должен быть ещё некий код с двумерным массивом, а в конце переход обратно. а как это реализовать, я к сожаленью не знаю

Добавлено через 21 минуту
помогите пожалуйста кто-нибудь, завтра сдавать!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10859 / 6738 / 1618
Регистрация: 25.07.2009
Сообщений: 12,476
28.04.2010, 18:46 4
NikITKA123, за решение задачи наверное не пройдёт, но в принципе матрицу сортирует...
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 <set>
#include <algorithm>
#include <iterator>
#include <cassert>
 
int main(){
    const int ROWS = 3;
    const int COLS = 4;
    int matrix[ROWS][COLS] = {
        { 6, 1, 8, 0 },
        { 3, 2, 9, 7 },
        { 4, 1, 8, 5 }
    };
 
    std::cout << "Unsorted matrix:" << std::endl;
    for ( int i = 0; i < ROWS; ++i ){
        std::copy(matrix[i], matrix[i] + COLS, std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    }
 
    std::multiset<int> ms;
    for ( int i = 0; i < ROWS; ++i )
        for ( int j = 0; j < COLS; ++j )
            ms.insert(matrix[i][j]);
    assert ( ms.size() == ROWS * COLS );
    for ( int i = 0; i < ROWS; ++i ){
        for ( int j = 0; j < COLS; ++j ){
            matrix[i][j] = *ms.begin();
            ms.erase(ms.begin());
        }
    }
 
    std::cout << "Sorted matrix:" << std::endl;
    for ( int i = 0; i < ROWS; ++i ){
        std::copy(matrix[i], matrix[i] + COLS, std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    }
 
    return 0;
}
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2010, 18:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Быстрая сортировка двумерного массива
Здравствуйте. У меня есть задание по сортировкам. Нужно заданный двумерный массив из рандомных...

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

Быстрая сортировка двумерного массива
Нужно отсортировать двумерный массив по убыванию быстрой сортировкой. Вроде всё работает, но не...

Быстрая сортировка для двумерного массива
Здравствуйте уважаемые, помогите пожалуйста, нужно сделать быструю сортировку для двумерного...

"Быстрая" сортировка с итерационным циклом вычисления медианы
Написать программу на С++: &quot;Быстрая&quot; сортировка с итерационным циклом вычисления медианы. Для...

Быстрая сортировка. Нарушение прав доступа при чтении "0xfdfdfdfd"
Всем доброго суток времени прошу помогите найти ошибку при компиляции ошибок нет, при запуску...


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

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

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