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

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

Войти
Регистрация
Восстановить пароль
 
strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 118
#1

Не получается составить блочную сортировку - C++

17.11.2012, 18:39. Просмотров 233. Ответов 0
Метки нет (Все метки)

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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
void bucketSort (int [], int);
 
int main()
{
    const int size = 10;
    int array1[size] = { 0 }; //одномерный массив, который будем сортировать
 
    srand(4);
 
    //заполняем массив
    for (int i = 0; i < size; i++)
    {
        array1[i] = 1 + rand() % 100;
        cout << array1[i] << " ";
    }
 
    cout << endl;
 
    bucketSort (array1, size); // функция, которая будет выполнять блочную сортировку
 
    //вывод отсотированного массива
    for (int i = 0; i < size; i++)
        cout << array1[i] << " " ;
 
    cout << endl;
 
    system("pause");
    return 0;
}
 
void bucketSort (int array1[], int n)
{
    int array2[10][10] = { 0 }; // создаем новый двумерный массив, для того чтобы сортировать по блокам
    int max = 0;
 
    // определяю максимальный элемент
    for (int i = 0; i < n; i++)
        if (array1[i] > max)
            max = array1[i];
 
    int m = 10; //делитель, нужен будет для работы с разрядами
 
    while (m <= max)
    {
        int array3[10] = { 0 }; //в этом массиве я собирался хранить количество элементов одинаковой разрядности, чтобы потом заполнить ими одну строку в двумерном массиве
 
        //дальше неправильно
        for (int i = 0; i < n; i++)
        {
            array2[array1[i] / m][array3[array1[i] / m]] = array1[i];
            ++array3[array1[i] / m];
        }
 
        for (int i = 0; i < n; i++)
            array1[i] = 0;
 
        //копирую значения в одномерный массив
        for (int i = 0; i < 10; i++)
            for (int j = 0; array2[i][j] != 0; j++)
                array1[i] = array2[i][j];
 
        m *= 10;
    }
}
Добавлено через 3 часа 53 минуты
Получилось.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
 
void bucketSort (int [], int);
 
int main()
{
    const int size = 10;
    int array1[size] = { 0 }; //одномерный массив, который будем сортировать
 
    srand(time(0));
 
    //заполняем массив
    for (int i = 0; i < size; i++)
    {
        array1[i] = 1 + rand() % 100;
        cout << array1[i] << " ";
    }
 
    cout << endl;
 
    bucketSort (array1, size); // функция, которая будет выполнять блочную сортировку
 
    //вывод отсотированного массива
    for (int i = 0; i < size; i++)
        cout << array1[i] << " " ;
 
    cout << endl;
 
    system("pause");
    return 0;
}
 
void bucketSort (int array1[], int n)
{
    int array2[10][10] = { 0 }; // создаем новый двумерный массив, для того чтобы сортировать по блокам
    int max = 0;
 
    // определяю максимальный элемент
    for (int i = 0; i < n; i++)
        if (array1[i] > max)
            max = array1[i];
 
    int m = 10; //делитель, нужен будет для работы с разрядами
 
    while (m / 10 <= max)
    {
        int array3[10] = { 0 }; //в этом массиве я собирался хранить количество элементов одинаковой разрядности, чтобы потом заполнить ими одну строку в двумерном массиве
        
        //обнуление массива блоков
        for (int i = 0; i < 10; i++)
            for (int j = 0; j < n; j++)
                array2[i][j] = 0;
 
        for (int i = 0; i < n; i++)
        {
            array2[(array1[i] % m) / (m / 10)][array3[(array1[i] % m) / (m / 10)]] = array1[i]; //вычисляет адрес клетки и присваевает ему соответствующее значение в неотсортированном массиве
            ++array3[(array1[i] % m) / (m / 10)]; // если в определенной строчке уже есть число, то нужно увеличить счетчик, чтобы в следующий раз число с такой же разряднстью стало на следующую ячейку
        }
 
        //обнуление одномерного массива
        for (int i = 0; i < n; i++)
            array1[i] = 0;
 
        int count = 0;
 
        //копирую значения в одномерный массив
        for (int i = 0; i < 10; i++)
            for (int j = 0; array2[i][j] != 0; j++)
            {
                array1[count] = array2[i][j];
                count++;
            }
 
        m *= 10;
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.11.2012, 18:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается составить блочную сортировку (C++):

Сортировку вставками меняем на Пирамидальную сортировку и на Сортировку подсчётом - C++
Здравствуйте. Я не как не могу разобраться.Помогите. У меня есть листинг сортировки вставками: #include &quot;stdafx.h&quot; #include...

Подскажите как эту сортировку переделать в сортировку по алфавиту? - C++
Подскажите как эту сортировку переделать в сортировку по алфавиту?? vector&lt;std::pair&lt;string, int&gt;&gt; popularAuthor; ...

Не получается составить программу - C++
У меня получилось что программа определяет точное попадание но у нас же есть сплеш S,как его выразить?Он же во все стороны идет а не в...

не получается составить программу - C++
составить программы эти не могу на С++, помогите кто сможет, буду презнателен. решить методом Жордана Гауса 4,13 x1 -2,87x2- 1,94x3...

Сортировку вставками меняем на сортировку слиянием - C++
Код программы выполняет сортировку массива вставками. Как сюда вставить код сортировки массива методом слияния, вместо метода вставками,что...

Дано вещественное x. Вычислить z = f( x ), не получается составить код - C++
Дано вещественное x. Вычислить z = f( x ) http://ms.sfu-kras.ru/file.php/59/Lab_5/image014.gif (только в выражении вторая часть не...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.11.2012, 18:39
Привет! Вот еще темы с ответами:

Составить из данных слогов возможные слова и определить, получается ли заданное слово - C++
Даны три слога, каждый из двух букв и слово из 6 букв. Составить из слогов возможные слова и определить, получается ли заданное слово....

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

Как сделать блочную сортировку? - C#
как сделать блочную сортировку?????

Реализовать блочную сортировку для списка данных - Prolog
помогите реализовать блочную сортировку для списка данных


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

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

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