Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
_LoneR_
90 / 90 / 13
Регистрация: 15.01.2011
Сообщений: 494
1

Исправить код для сортировки двумерного массива

16.03.2014, 20:23. Просмотров 882. Ответов 1
Метки нет (Все метки)

Здравствуйте! Укажите пожалуйста на мою ошибку. Нужно через быструю сортировку отсортировать двумерный массив, но что бы сортировались отдельно элементы каждой строки. Я добился только того что сортирует первую строчку и то не очень понял как это у меня получилось, но хоть это уже хорошо.
Подскажите что нужно исправить что бы корректно работала программа!
C++ (Qt)
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
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
 
const int n = 4;
int a[n][n];
 
void FillArray()
{
    srand(time(NULL));
    ofstream file("input.txt");
 
    for(int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100;
            file << setw(5) << a[i][j];
        }
        file << endl;
    }
}
 
void PrintArray()
{
    for(int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << setw(5) << a[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl << endl;
}
 
void quickSort(int l, int r)
{
    int x = a[0][l + (r - l) / 2];
    int i = l;
    int j = r;
    for (int k = 0; k < x; k++)
    {
        while(i <= j)
        {
        
                while(a[k][i] < x) i++;
                while(a[k][j] > x) j--;
                if(i <= j)
                {
                    swap(a[k][i], a[k][j]);
                    i++;
                    j--;
                }
            }
    }
    if (i<r)
                quickSort(i, r);
    
    if (l<j)    
        quickSort(l, j);    
}
int main()
{
    FillArray();
    PrintArray();
    quickSort(0, n-1);
    PrintArray();    
    cin.get();
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2014, 20:23
Ответы с готовыми решениями:

Исправить код сортировки массива
Добрый вечер) Обращаюсь к вам за помощью. Есть программа, которая должна сортировать массив, а...

Сортировки для двумерного массива
Подскажите, пожалуйста, код блочной сортировки для двумерного массива, или сортировки вставками...

Исправить код сортировки выбором
Реализуйте алгоритм на языке Си, добавив в программу подсчет количества сравнений и перестановок,...

Исправить код, реализующий алгоритм сортировки
Доброе утро. Сделал попытку реализовать функцию сортировки простым двухпутевым слиянием, но не...

Как исправить данный код сортировки?
Вот только не надо никаких анализов, вопросов, и т. д. Конкретно мой пример. Программа на...

1
fishec
121 / 121 / 62
Регистрация: 07.09.2013
Сообщений: 343
16.03.2014, 23:44 2
Лучший ответ Сообщение было отмечено _LoneR_ как решение

Решение

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
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
 
const int n = 3;
int a[n][n];
 
void FillArray()
{
    srand(time(NULL));
    ofstream file("input.txt");
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 100;
            file << setw(5) << a[i][j];
        }
        file << endl;
    }
}
 
void PrintArray()
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << setw(5) << a[i][j] << " ";
        }
        cout << endl;
    }
    cout << endl << endl;
}
 
void Line_quickSort(int l, int r,int k)
{
    int x = a[k][(l + (r - l) / 2) % n];
    
    int i = l;
    int j = r;
    while (i <= j)
    {
 
            while (a[k][i] < x) i++;
            while (a[k][j] > x) j--;
            if (i <= j)
            {
                swap(a[k][i], a[k][j%n]);
                i++;
                j--;
            }
    }
    
    if (i < r)
        Line_quickSort(i, r, k);
 
    if (l < j)
        Line_quickSort(l, j, k);
}
 
void quickSort(){
    for (int i = 0; i < n; i++){
        Line_quickSort(0,n-1,i);
    }
}
int main()
{
 
    FillArray();
    PrintArray();
    quickSort();
    PrintArray();
    cin.get();
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2014, 23:44

Функция сортировки двумерного массива
необходимо написать функцию сортирующую двумерный массив. за основу взял сортировку при помощи...

Шаблонная функция сортировки двумерного массива
Помогите пожалуйста написать шаблонную функцию сортировки двумерного массива (матрицы) любым...

Не корректное выполнение сортировки двумерного массива
Приветствую всех. Помогите найти и исправить причину не корректной работы программы. Примечание:...


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

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

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