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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.96
NikITKA123
19 / 18 / 1
Регистрация: 28.04.2010
Сообщений: 86
#1

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

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

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

Добавлено через 33 минуты
есть у кого какие мысли?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2010, 14:59     "Быстрая" сортировка двумерного массива
Посмотрите здесь:

C++ быстрая сортировка " разделяй и властвуй"
"Быстрая" сортировка с итерационным циклом вычисления медианы C++
C++ "быстрая" сортировка (вызов функции)
C++ "Быстрая" сортировка - выдаётся ошибка
C++ Не работает быстрая сортировка для двумерного массива
C++ Быстрая сортировка: ошибка "Stack overflow"
C++ Быстрая сортировка двумерного массива
Быстрая сортировка. Нарушение прав доступа при чтении "0xfdfdfdfd" C++
Быстрая сортировка двумерного массива C++
C++ Сортировка двумерного массива методом вставок с "конфеткой"
C++ Быстрая сортировка двумерного массива
Быстрая сортировка двумерного массива C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1234 / 772 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
28.04.2010, 15:31     "Быстрая" сортировка двумерного массива #2
1. Перегоняешь в простой массив, сортируешь, потом перегоняешь обратно в матрицу..
2. Если используешь матрицу на стеке: до есть не динамическую,
можно просто сделать следующую махинацию:
C++
1
2
3
4
5
int *p =(int*)matrix;  //указатель p можешь передать  в функцию qsort.
/*Это представление матрицы массивом...
С динамическими матрицами это не прокатывает,
поэтому использовать надо пункт 1.
*/
NikITKA123
19 / 18 / 1
Регистрация: 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 минуту
помогите пожалуйста кто-нибудь, завтра сдавать!
easybudda
Эксперт С++
 Аватар для easybudda
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
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;
}
Yandex
Объявления
28.04.2010, 18:46     "Быстрая" сортировка двумерного массива
Ответ Создать тему
Опции темы

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