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

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

Войти
Регистрация
Восстановить пароль
 
vova287
0 / 0 / 0
Регистрация: 15.11.2010
Сообщений: 5
#1

Поразрядная сортировка - C++

17.12.2011, 21:02. Просмотров 647. Ответов 0
Метки нет (Все метки)

Доброе время суток, написал программу поразрядной сортировки по определенному критерию должно сортировать, проблем в логике вроде бы не должно быть, но вот проблема в функции yy в том что не хватает выделения памяти для mask. даже при присвоение типа unsigned long long выходит за предел . Подскажите в чем причина и как с ней бороться
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
 
// количество бит для сортировки
#define POINTER_BITSIZE 32
 
void print(int **a, int size, int j = -1, char ch = '|')
{
    if (j != -1) cout << "j = " << j << endl;
    for (int i = POINTER_BITSIZE; i > 0; i--)
        cout << (i - 1) / 10;
    cout << endl;
    for (int i = POINTER_BITSIZE; i > 0; i--)
        cout << (i - 1) % 10;
    cout << endl;
    for (int i = POINTER_BITSIZE - 1; i > j; i--)
        cout << " ";
    if (j != -1) cout << ch;
    cout << endl;
    for (int i = 0; i < size; i++)
    {
        for (int j = POINTER_BITSIZE - 1; j >= 0; j--)
            cout << (((unsigned int)a[i] >> j) & 1);
        cout.width(15);
        cout << (unsigned int)a[i] << endl;
    }
    getchar();
}
 
int yy (int * AA, int * BB)
{
    int sizeOf = sizeof(*AA)*8;
    
     int first = 1;
     int * mask = new int [sizeOf];
     int * direct = new int [sizeOf];
    if (first)
    {
        first = 0;
        for (unsigned long i=0, bit=0, bitStep=2, bitIndex = 0; i<sizeOf; i++)
        {
            mask[i] = 1 << bit;
            direct[i] = (bitIndex%2 == 0) ? 1 : -1;
            bitIndex++;
            if ((bit + bitStep < sizeOf) && !(bit + bitStep < 0)) bit += bitStep;
            else
            {
                bit += bitStep - 1;
                bitStep = -bitStep;
            }
        }
    }
    
    int A = *AA, B = *BB;
    for (int i=0; i<sizeOf; i++)
    {
        printf("%i\n", mask[i]);
        int a = A & mask[i], b = B & mask[i];
        if (a == b) return 0;
        else return direct[i];
    }
}
 
int ** XXXsort(int ** a, int size)
{
    vector<int *> myvector (a, a+size);
    vector<int *>::iterator it;
    sort (myvector.begin(), myvector.end(), yy);
    int ** b = new int * [size];
    int i = 0;
    for (it=myvector.begin(); it!=myvector.end(); it++) b[i++] = (*it);
    return b;    
}
 
 
int main()
{
    
    int size;
    char k;
    cout << "input size"<<"\n";
    cin >> size;
    
    int **a = new int * [size];
    cout << "input by hand"<<"\n";
    cin>>k;
        if (tolower(k) == 'y')
            {
                for (int i = 0; i < size; i++)
                    {
                        int x;
                        cin >> x;
                        a[i] = (int *)x;
                    }
            }
        else 
            {
                for (int i = 0; i < size; i++)
                a[i] = (int *)rand();
            
            }
 
    cout << "before sort:" << endl;
    print(a, size);
    int ** b = XXXsort(a, size);
    delete [] a;
    cout << "after sort:" << endl;
    print(b, size);
    delete [] b;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2011, 21:02     Поразрядная сортировка
Посмотрите здесь:

Поразрядная сортировка массива - C++
Дан массив двоичных чисел, нужно отсортировать его с помощью поразрядной сортировки, начиная со старшего разряда, функция должна быть...

Поразрядная сортировка и его недостатки - C++
Собствено сабж в &quot;плохости&quot; поразрядной сортировки. Ведь, если она отрабатывает за линейное время и не требует спец. аппаратной поддержки,...

Трехпутевая поразрядная быстрая сортировка - C++
нужна помощь с написанием програмки на тему: Трехпутевая поразрядная быстрая сортировка заранее спасибо

Поразрядная операция & - C++
Здравствуйте! У меня есть программа: unsigned short int con(unsigned short int x, unsigned short int y, unsigned short int z); ...

Поразрядная конъюнкция / Дизъюнкция / Исключающие, (&), (|), (^) - C++
... cout &lt;&lt; &quot;\n 6 &amp; 5 = &quot; &lt;&lt; (6 &amp; 5); cout &lt;&lt; &quot;\n 6 | 5 = &quot; &lt;&lt; (6 | 5); cout &lt;&lt; &quot;\n 6 ^ 5 = &quot; &lt;&lt; (6 ^ 5); ... ...

Сортировка Шелла и пирамидальная сортировка для символов - C++
Здраствуйте, можете пожалуйста привести пример сортировок шелла и пиромидальной сортировки для символов, а то ничего не могу ...

Сортировка вектора по полю(Сортировка вставками) - C++
Здравствуйте! Нужно написать сортировку вектора по полю weight класса tomato. Вот класс: #pragma once #include &lt;iostream&gt; ...

2 сортировки: пирамидальная сортировка и сортировка слиянием - C++
Реализовать два улучшенных алгоритма сортировки. Для каждого алгоритма вычислить показатель качества сортировки (количество операций, т.е....

Быстрая сортировка (сортировка методом Хоара) - C++
Ввести массив x1,x2,...,x20 в диапазоне . Требуется расположить отрицательные элементы в порядке убывания. Вывести массивы до и после...

C/C++ FAQ :: Быстрая сортировка (сортировка Хоара) - C++
Вопрос, скорее академический, по мотивам реализации. Вот в faq приведена реализация этого метода сортировки на C++. В коде есть следующий...


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

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

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