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

Исправить Radix sort - C++

Восстановить пароль Регистрация
 
_LoneR_
 Аватар для _LoneR_
90 / 90 / 9
Регистрация: 15.01.2011
Сообщений: 494
29.03.2014, 13:21     Исправить Radix sort #1
Здравствуйте! Помогите исправить ошибку в Radix sort! Я пытался изменить код который сортирует одномерный массив, на сортировку двумерного массива, но он не работает. Я не совсем понимаю как работает radix sort. Помогите исправить буду очень благодарен.
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
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <iomanip>
#include <ctime>
#include <fstream>
#include <queue>
 
using namespace std;
 
const int col = 5;
const int row = 5;
 
int Arr[row][col];
 
int roz(int num, int nr)
{
    num = num >> (nr << 3);
    return num & 255;
}
 
void FillArray()
{
    ofstream input("input.txt");
    srand(time(NULL));
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            Arr[i][j] = rand() % 100;
            input << setw(5) << Arr[i][j];
        }
        input << endl;
    }
}
 
void ShowArray()
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << setw(5) << Arr[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
 
void Sort()
{
    queue <int> mas[256];
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < row; j++)
        {
            for (int k = 0; k < col; k++)
            {
                mas[roz(Arr[j][k], i)].push(Arr[j][k]);
            }
        }
        for (int k = 0; k < 256; k++)
        {
            for (int j = 0; j < row; j++)
            {
                for (int z = 0; z < col; z++)
                {
                    while (!mas[k].empty())
                    {
                        Arr[j][z] = mas[k].front();
                        mas[k].pop();
                    }
                }
            }
        }
    }
}
 
int main()
{
    FillArray();
    ShowArray();
    Sort();
    ShowArray();
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2014, 13:21     Исправить Radix sort
Посмотрите здесь:

Функция sort C++
std::sort(iterator, iterator, method) подскажите как исправить C++
C++ Быстрая Сортировка quick-sort (ошибка в 40 строке) как исправить?
C++ Функция sort()
C++ sort()
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ezembi
 Аватар для Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
29.03.2014, 13:55     Исправить Radix sort #2
А как именно надо отсортировать?
_LoneR_
 Аватар для _LoneR_
90 / 90 / 9
Регистрация: 15.01.2011
Сообщений: 494
29.03.2014, 14:01  [ТС]     Исправить Radix sort #3
Ezembi, по возрастанию
Ezembi
 Аватар для Ezembi
100 / 87 / 3
Регистрация: 29.05.2013
Сообщений: 227
29.03.2014, 14:45     Исправить Radix sort #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
#include <iostream>
#include <iomanip>
#include <ctime>
#include <fstream>
#include <queue>
 
using namespace std;
 
const int col = 5;
const int row = 5;
 
int Arr[row][col];
 
int roz(int num, int nr)
{
    num = num >> (nr << 3);
    return num & 255;
}
 
void FillArray()
{
    ofstream input("input.txt");
    srand(time(NULL));
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            Arr[i][j] = rand() % 100;
            input << setw(5) << Arr[i][j];
        }
        input << endl;
    }
}
 
void ShowArray()
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < col; j++)
        {
            cout << setw(5) << Arr[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
 
void Sort()
{
    int cpy;
        for (int k = 0; k < 256; k++)
        {
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < col; j++)
                {
                    if(Arr[i][j]>Arr[i][j+1])
                    {
                        cpy = Arr[i][j];
                        Arr[i][j]=Arr[i][j+1];
                        Arr[i][j+1]=cpy;
                        
                    }
                }
            }
        }
    
}
 
int main()
{
    FillArray();
    ShowArray();
    Sort();
    ShowArray();
    cin.get();
    return 0;
}
Добавлено через 32 минуты
Так правильней, мой косяк =D
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
void Sort()
{
    int cpy;
    int a[row*col];
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
        {
            a[i*row+j]=Arr[i][j];
        }
        for (int i = 0; i < row*col; i++)
        {
            for (int j = 0; j < row*col; j++)
            {
                if(a[j]>a[j+1])
                {
                    cpy = a[j];
                    a[j]=a[j+1];
                    a[j+1]=cpy;
                }
            }
        }
    for(int i=0;i<row;i++)
        for(int j=0;j<col;j++)
            Arr[i][j]=a[i*row+j+1];
}
Yandex
Объявления
29.03.2014, 14:45     Исправить Radix sort
Ответ Создать тему
Опции темы

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