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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ не читает char[] http://www.cyberforum.ru/cpp-beginners/thread700200.html
Есть функция, читающая из данной строки с данной позиции следующую цифру: int sread(char* inpfs, int* topos){ vector<int> res; while(static_cast<int>(inpfs) != 0 || static_cast<int>(inpfs) != 32){ res.insert(res.end(), static_cast<int>(inpfs)-48); *topos += 1; } return tosystem(res, 10); }
C++ Функция connection Добрый день, уважаемые пользователи! По долгу службы я столкнулся с работой написанием клиента к серверу. Всё в общем-то более-менее работает. Клиент считывает адрес из конфигурационного файла, после чего пытается к нему соединиться. Если же соединения нет, то пользователь должен получить сообщение о том, что нет связи с сервером. Я делаю это по сравнению результата функции connection().... http://www.cyberforum.ru/cpp-beginners/thread700197.html
C++ Неправильно считает сумму между первым и последним положительными элементами
int min, i, n, sum=0, arr,i1,i2; // arr - массив целых чисел, максимальный размер 100 элементов cin >> n; for (i = 0; i < n; i++) // ввод массива { cout<<"Введите элемент # "<<i+1<<endl; cin >> arr;
Реализация игры ,,Змейка,, C++
Всем привет :) У меня возникло несколько вопросов о реализации такой консольной игры. Можно ли сделать короткую паузу, потому что сама змейка будет двигаться ооочень быстро. Также, подскажите функцию считывания клавиш, которая не делала бы паузу в самой программе (функция getch() не подходит) З.Ы. Я поклонник тех людей, которые считают, что изобретать велосипеды полезно
C++ Разработка оконого интерфейса под финдовс http://www.cyberforum.ru/cpp-beginners/thread700173.html
Ребята есть 2 программы для которых я не могу сделать оконный интерфейс , что бы была кнопка там показать решение или что нить в жтом роде=)) Подскажите или кто может сделайте=) : Программа №1 #include <iostream> #include <cmath> using namespace std ; int main() { cout << "Plese press Enter to keep the program\n";
C++ Почему не работает цикл for У меня не работает первый цикл for, хотя вроде ошибки нигде найти не могу. То есть программа должна вывести все цифры чисел от 1345 до 1349 по одному. Например 1 3 4 5 1 3 4 6 1 3 4 7 1 3 4 8 1 3 4 9. Но программа выводит только 1 3 4 5, дальше не считает. В чём причина? #include <iostream> using namespace std; int main () { int a; подробнее

Показать сообщение отдельно
strange_man
 Аватар для strange_man
9 / 9 / 0
Регистрация: 17.05.2012
Сообщений: 117
17.11.2012, 18:39     Не получается составить блочную сортировку
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;
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru