Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35

Генератор чисел в поразрядной сортировке

04.03.2019, 16:04. Показов 3023. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include "iostream"
#include "windows.h"
using namespace std;
int n, col_razr=0;
int max_razr(int chislo)
{
    int max=0;
    while(chislo>1)
        {
                chislo/=10;
                max++;
        }
    return max;
}
 
int velich_razr(int chislo,int razr)
{
        while(razr>1)
        {
                chislo/=10;
                razr--;
        }
        return chislo%10;
}
 
void sort_razr(int **dop_mas, int *mas, int razr)
{
        int *mas_col, i,j, temp=0;
        mas_col=new int[n];
        for(i=0; i<n; i++)
                mas_col[i]=0;
        for(i=0; i<n; i++)
        {
                int a=velich_razr(mas[i], razr);
                dop_mas[mas_col[a]][a]=mas[i];
                mas_col[a]++;
        }
        for(i=0; i<n; i++)
        {
                for(j=0; j<mas_col[i]; j++)
                {
                        mas[temp]=dop_mas[j][i];
                        temp++;
                }
        }
}
 
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        int razr, i, *mas, **dop_mas;
        cout<<"Введите размер последовательности: "<< endl;
        cin>>n;
        mas=new int[n];
        cout<<"Введите элементы последовательности: "<< endl;
        for(i=0; i<n; i++)
        {
            cout<<"["<<i+1<<"]= ";
            cin>>mas[i];
        }
        dop_mas=new int*[n];
        for(i=0; i<n; i++)
        dop_mas[i]=new int[n];
        for(i=0; i<n; i++)
            if(col_razr<max_razr(mas[i]))
                col_razr=max_razr(mas[i]);
        for(razr=1; razr<=col_razr; razr++)
                sort_razr(dop_mas, mas, razr);
        for(i=0; i<n; i++)
                cout<<mas[i]<<endl;
        return 0;
}
Как сделать чтобы вместо выбора и введения элементов , сделать рандом чисел в диапазоне от 0 до n ,где n может быть 1млн или даже больше
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2019, 16:04
Ответы с готовыми решениями:

МТ:Вычисление поразрядной дизъюнкции двух целых неотрицательных двоичных чисел
Помогите понять условие задачи. Не понимаю что нужно делать. Задание: Вычисление поразрядной дизъюнкции двух целых неотрицательных...

Генератор комплексных чисел. Генератор гауссовских целых чисел
rand(1,n) - генерирует случайные числа, нормально распределенные на . Есть ли аналогичный генератор для комплексных чисел? В частности...

Интерпретация отрицательных чисел в сортировке
Здравствуйте, уважаемые форумчане и знатоки c++. Имеется lsd поразрядная сортировка для целых положительных чисел, которая сортирует по...

39
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
04.03.2019, 21:50  [ТС]
Студворк — интернет-сервис помощи студентам
И еще заметил что мой алгоритм пропускает некоторые числа, не понимаю с чем связано это

Добавлено через 1 минуту
Ну нужно отсортировать эти случайные числа по возрастанию с помощью алгоритма поразрядной сортировки

Добавлено через 27 секунд
Цитата Сообщение от jugu Посмотреть сообщение
зачем еще какие-то цифры в заданном диапазоне?
Не понял, вы про что?
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
04.03.2019, 22:24
Цитата Сообщение от myfurms Посмотреть сообщение
И еще заметил что мой алгоритм пропускает некоторые числа, не понимаю с чем связано это
Связано с тем, что код, который вы скопипастили, содержит ошибку (возможно не одну).
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
04.03.2019, 22:26
Цитата Сообщение от myfurms Посмотреть сообщение
Ну нужно отсортировать эти случайные числа по возрастанию с помощью алгоритма поразрядной сортировки
Ага, теперь всё понятно. Значит на входе у нас случайно заполненный массив чисел. Его вы пишем в первый файл. А во второй файл пишем отсортированный массив. Так?
1
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
04.03.2019, 22:32  [ТС]
Да все верно.

Добавлено через 1 минуту
Цитата Сообщение от valen10 Посмотреть сообщение
Связано с тем, что код, который вы скопипастили, содержит ошибку (возможно не одну).
Ну он считал изначально все числа , пока я не добавил рандом

Добавлено через 1 минуту
Цитата Сообщение от jugu Посмотреть сообщение
отсортированный массив.
Да, только поразрядным алгоритмом сортировка. Пропускает несколько цифр моя сортировка, не могу понять с чем связано
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
04.03.2019, 22:32
Цитата Сообщение от myfurms Посмотреть сообщение
Да все верно.
Лады, завтра сделаем.
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
04.03.2019, 23:24
Цитата Сообщение от myfurms Посмотреть сообщение
Ну он считал изначально все числа , пока я не добавил рандом
Рандом никак не должен влиять на результат. А вот размеры массивов могут повлиять. В соседней теме вы, кажется, говорили, что нужно порядка 3 млн. чисел. Полагаю, квадратный dop_mas просто не поместится в памяти при таком количестве чисел. Да и не нужен квадратный, там всего лишь разрядные группы сохраняются. 10xN должно быть достаточно.

Добавлено через 49 минут
myfurms, просто оставлю этот код здесь, сравните его со своим вариантом.
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
#include <algorithm>
#include <iostream>
#include <random>
 
using namespace std;
 
const size_t NUMBER_OF_DIGITS = 10;
 
/**
 * Получить количество цифр в числе.
 */
size_t getCountOfDigits(int x) {
    size_t count_of_digits = 0;
    while (x) {
        ++count_of_digits;
        x /= 10;
    }
 
    return count_of_digits;
}
 
/**
 * Получить цифру разряда числа (от младших к старшим).
 */
int getDigit(int x, size_t pos) {
    while (pos) {
        x /= 10;
        --pos;
    }
 
    return x % 10;
}
 
/**
 * Поразрядная сортировка.
 */
void radix_sort(int *arr, size_t size, size_t digit_pos) {
    // Массив для хранения групп чисел (группировка по разрядам).
    int **temp_arr = new int*[NUMBER_OF_DIGITS];
    for (size_t i = 0; i < NUMBER_OF_DIGITS; i++) {
        temp_arr[i] = new int[size];
    }
 
    // Массив для подсчета чисел в каждой группе.
    size_t count_arr[NUMBER_OF_DIGITS] = {0, };
 
    // Сохранение чисел в соответствующую цифре разряда группу.
    for (size_t i = 0; i < size; ++i) {
        int digit = getDigit(arr[i], digit_pos);
        temp_arr[digit][count_arr[digit]] = arr[i];
        count_arr[digit]++;
    }
 
    // Запись чисел обратно в массив по группам от младшей к старшей.
    for (size_t digit = 0, insert_pos = 0; digit < NUMBER_OF_DIGITS; ++digit) {
        for (size_t i = 0; i < count_arr[digit]; ++i) {
            arr[insert_pos] = temp_arr[digit][i];
            ++insert_pos;
        }
    }
 
    for (size_t i = 0; i < NUMBER_OF_DIGITS; i++) {
        delete[] temp_arr[i];
    }
 
    delete[] temp_arr;
}
 
template <class ForwardIterator, class Distribution>
void random_array_fill(ForwardIterator begin, ForwardIterator end, Distribution&& dist) {
    std::random_device rd;
    std::mt19937 gen(rd());
    for (; begin != end; ++begin) *begin = dist(gen);
}
 
template <typename ForwardIterator>
void printArray(ForwardIterator begin, ForwardIterator end) {
    for ( ; begin != end; ++begin) {
        cout << *begin << endl;
    }
}
 
int main() {
    const int min_number = 1;
    const int max_number = 100000;
 
    size_t n;
    cout << "Введите размер последовательности: " << endl;
    cin >> n;
 
    int *arr = new int[n];
    random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number));
    printArray(arr, arr + n);
    cout << endl;
 
    // Поиск максимального количества цифр среди чисел массива.
    size_t max_count_of_digits = 0;
    for (size_t i = 0; i < n; i++) {
        max_count_of_digits = max(max_count_of_digits, getCountOfDigits(arr[i]));
    }
 
    // Сортировка по разрядам от младшего к старшему.
    for (unsigned digit_pos = 0; digit_pos < max_count_of_digits; ++digit_pos) {
        radix_sort(arr, n, digit_pos);
    }
 
    printArray(arr, arr + n);
    return 0;
}
1
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 09:40  [ТС]
Цитата Сообщение от valen10 Посмотреть сообщение
просто оставлю этот код здесь, сравните его со своим вариантом.
Ваш код выглядит намного лучше моего))) но я ведь только учусь) много чего не знаю,но смотрю ролики на ютубе) Спасибо)
Мне осталось только сделать вывод в два файла и
Цитата Сообщение от valen10 Посмотреть сообщение
const int max_number = 100000;
вот это старочка max_number должнга равняться n
Цитата Сообщение от valen10 Посмотреть сообщение
cout << "Введите размер последовательности: " << endl;
* * cin >> n;
Добавлено через 2 минуты
Цитата Сообщение от jugu Посмотреть сообщение
Лады, завтра сделаем.
Спасибо огромное за то что помогли разобраться и уделили мне время)
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.03.2019, 10:05
Цитата Сообщение от valen10 Посмотреть сообщение
myfurms, просто оставлю этот код здесь, сравните его со своим вариантом.
Я так понял, мне не нужно ничего делать уже?
0
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 13:26  [ТС]
Цитата Сообщение от jugu Посмотреть сообщение
Я так понял, мне не нужно ничего делать уже?
C++
1
2
3
4
5
6
7
FILE *f = fopen("file1.txt", "w");
    random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number));
   
   printArray(arr, arr + n);
    fprintf(f, printArray(arr, arr + n))
    cout << endl;
   fclose(f);
c cout умею выводить в файл а как с printf быть?
В интернете почитал, ну что то как то не идет

Добавлено через 1 час 26 минут
Сделал так) тоже ошибки
C++
1
2
3
4
5
6
7
8
9
10
template <typename ForwardIterator>
void printArray(ForwardIterator begin, ForwardIterator end) {
    std::ofstream fout;
 fout.open("file1.txt");
    for ( ; begin != end; ++begin) {
        
        fout << *begin << endl;
    }
    fout.close();
}
Добавлено через 8 секунд
Сделал так) тоже ошибки
C++
1
2
3
4
5
6
7
8
9
10
template <typename ForwardIterator>
void printArray(ForwardIterator begin, ForwardIterator end) {
    std::ofstream fout;
 fout.open("file1.txt");
    for ( ; begin != end; ++begin) {
        
        fout << *begin << endl;
    }
    fout.close();
}
Добавлено через 10 секунд
Сделал так) тоже ошибки
C++
1
2
3
4
5
6
7
8
9
10
template <typename ForwardIterator>
void printArray(ForwardIterator begin, ForwardIterator end) {
    std::ofstream fout;
 fout.open("file1.txt");
    for ( ; begin != end; ++begin) {
        
        fout << *begin << endl;
    }
    fout.close();
}
Добавлено через 37 минут
Помоги с выводом в файл , рандома и сортировки, что я не так делаю? код выше

Добавлено через 56 минут
Сортировку в файл выводит, а рандом в файл не получается сделать, помогите пожалуйста
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <algorithm>
#include <iostream>
#include <random>
#include <fstream>  
using namespace std;
 
const size_t NUMBER_OF_DIGITS = 10;
 
/**
 * Получить количество цифр в числе.
 */
size_t getCountOfDigits(int x) {
    size_t count_of_digits = 0;
    while (x) {
        ++count_of_digits;
        x /= 10;
    }
 
    return count_of_digits;
}
 
/**
 *Получить цифру разряда числа (от младших к старшим).
 */
int getDigit(int x, size_t pos) {
    while (pos) {
        x /= 10;
        --pos;
    }
 
    return x % 10;
}
 
/**
 * Поразрядная сортировка.
 */
void radix_sort(int *arr, size_t size, size_t digit_pos) {
    //  Массив для хранения групп чисел (группировка по разрядам).
    int **temp_arr = new int*[NUMBER_OF_DIGITS];
    for (size_t i = 0; i < NUMBER_OF_DIGITS; i++) {
        temp_arr[i] = new int[size];
    }
 
    // Массив для подсчета чисел в каждой группе.
    size_t count_arr[NUMBER_OF_DIGITS] = {0, };
 
    // Сохранение чисел в соответствующую цифре разряда группу.
    for (size_t i = 0; i < size; ++i) {
        int digit = getDigit(arr[i], digit_pos);
        temp_arr[digit][count_arr[digit]] = arr[i];
        count_arr[digit]++;
    }
 
    // Запись чисел обратно в массив по группам от младшей к старшей.
    for (size_t digit = 0, insert_pos = 0; digit < NUMBER_OF_DIGITS; ++digit) {
        for (size_t i = 0; i < count_arr[digit]; ++i) {
            arr[insert_pos] = temp_arr[digit][i];
            ++insert_pos;
        }
    }
 
    for (size_t i = 0; i < NUMBER_OF_DIGITS; i++) {
        delete[] temp_arr[i];
    }
 
    delete[] temp_arr;
}
 
template <class ForwardIterator, class Distribution>
void random_array_fill(ForwardIterator begin, ForwardIterator end, Distribution&& dist) {
    std::random_device rd;
    std::mt19937 gen(rd());
//  for (; begin != end; ++begin) *begin = dist(gen);
    
    ofstream lout;
    lout.open("file2.txt");
    if (!lout.is_open())
    {
        cout << "ошибка!" <<endl;
    }
    else {
        for (; begin != end; ++begin) *begin = dist(gen); {
       lout << *begin << endl;
            }
        
        lout.close();
    }
    
}
 
template <typename ForwardIterator>
void printArray(ForwardIterator begin, ForwardIterator end) {
    ofstream fout;
    fout.open("file1.txt");
    if (!fout.is_open())
    {
        cout << "ошибка!" <<endl;
    }
    else {
        for ( ; begin != end; ++begin) {
       fout << *begin << endl;
            }
        
        fout.close();
    }
 
            
}
 
int main() {
    setlocale(LC_ALL, "rus");
    const int min_number = 1;
   int max_number,b;
   cout << "Введите желаемый диапазон от 0 до n\n";
   cout << "n= ";
   cin >>b;
   max_number=b;
 
    size_t n;
    cout << "Введите размер последовательности: " ;
    cin >> n;
 
    int *arr = new int[n];
    random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number));
    printArray(arr, arr + n);
    cout << endl;
 cout << "Начинаем сортировку"<< endl;
    // Поиск максимального количества цифр среди чисел массива.
    size_t max_count_of_digits = 0;
    for (size_t i = 0; i < n; i++) {
        max_count_of_digits = max(max_count_of_digits, getCountOfDigits(arr[i]));
    }
 
    // Сортировка по разрядам от младшего к старшему.
    for (unsigned digit_pos = 0; digit_pos < max_count_of_digits; ++digit_pos) {
        radix_sort(arr, n, digit_pos);
    }
 
    printArray(arr, arr + n);
    return 0;
}
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.03.2019, 17:35
C++
1
2
3
4
5
6
//FILE *f = fopen("file1.txt", "w"); /* это всё есть в функции printArray */
    random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number));
    printArray(arr, arr + n);
    // fprintf(f, printArray(arr, arr + n)) /* это уже не нужно */
    // cout << endl; /* и это тоже */
   // fclose(f); /* и это */
Добавлено через 1 минуту
Делаем так:

C++
1
2
random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number)); // генерация чисел
printArray(arr, arr + n); // запись в файл
0
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 19:39  [ТС]
Цитата Сообщение от jugu Посмотреть сообщение
Делаем так:
так а как в файл записать то? какой синтаксис с этой строчкой
Цитата Сообщение от jugu Посмотреть сообщение
printArray(arr, arr + n);
Я выше писал свои варианты у меня не получалось
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.03.2019, 20:14
Цитата Сообщение от myfurms Посмотреть сообщение
так а как в файл записать то? какой синтаксис с этой строчкой
Вот функция печати:
C++
1
2
3
4
5
6
template <typename ForwardIterator>
void printArray(ostream & os, ForwardIterator begin, ForwardIterator end) {
    for (; begin != end; ++begin) {
        os << *begin << endl;
    }
}
Вот так она используется:
C++
1
printArray(cout, mas, mas + n);
Вместо cout можно подставить любой выходной поток.
0
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 20:25  [ТС]
Цитата Сообщение от jugu Посмотреть сообщение
ostream & os
а что вот это означает?
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.03.2019, 20:27
Цитата Сообщение от myfurms Посмотреть сообщение
а что вот это означает?
Это ссылка на выходной поток. Сюда можно подставить cout или любой другой поток вывода.
0
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 20:32  [ТС]
Цитата Сообщение от jugu Посмотреть сообщение
любой другой поток вывода.
а как сделать тогда чтоб в файл выводило , если так как я делал ты говоришь не правильно
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.03.2019, 20:38
Цитата Сообщение от myfurms Посмотреть сообщение
а как сделать тогда чтоб в файл выводило , если так как я делал ты говоришь не правильно
Потом что не туда вставляешь то, что я показываю...

Вот так:
C++
1
2
3
4
5
random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number));
    std::ofstream fout;
    fout.open("file1.txt");
    if (fout.good()) printArray(fout, mas, mas + n);
    fout.close();
1
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 21:07  [ТС]
Я запутался
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
05.03.2019, 21:16
Лучший ответ Сообщение было отмечено myfurms как решение

Решение

Цитата Сообщение от myfurms Посмотреть сообщение
Я запутался
Такое ощущение, что препод вас ничему там не учит...

Лови (целиком код на основе того, что сделал valen10):
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
114
115
116
117
118
119
120
121
#include <algorithm>
#include <iostream>
#include <fstream>
#include <random>
 
using namespace std;
 
const size_t NUMBER_OF_DIGITS = 10;
 
/**
 * Получить количество цифр в числе.
 */
size_t getCountOfDigits(int x) {
    size_t count_of_digits = 0;
    while (x) {
        ++count_of_digits;
        x /= 10;
    }
 
    return count_of_digits;
}
 
/**
 * Получить цифру разряда числа (от младших к старшим).
 */
int getDigit(int x, size_t pos) {
    while (pos) {
        x /= 10;
        --pos;
    }
 
    return x % 10;
}
 
/**
 * Поразрядная сортировка.
 */
void radix_sort(int *arr, size_t size, size_t digit_pos) {
    // Массив для хранения групп чисел (группировка по разрядам).
    int **temp_arr = new int*[NUMBER_OF_DIGITS];
    for (size_t i = 0; i < NUMBER_OF_DIGITS; i++) {
        temp_arr[i] = new int[size];
    }
 
    // Массив для подсчета чисел в каждой группе.
    size_t count_arr[NUMBER_OF_DIGITS] = { 0, };
 
    // Сохранение чисел в соответствующую цифре разряда группу.
    for (size_t i = 0; i < size; ++i) {
        int digit = getDigit(arr[i], digit_pos);
        temp_arr[digit][count_arr[digit]] = arr[i];
        count_arr[digit]++;
    }
 
    // Запись чисел обратно в массив по группам от младшей к старшей.
    for (size_t digit = 0, insert_pos = 0; digit < NUMBER_OF_DIGITS; ++digit) {
        for (size_t i = 0; i < count_arr[digit]; ++i) {
            arr[insert_pos] = temp_arr[digit][i];
            ++insert_pos;
        }
    }
 
    for (size_t i = 0; i < NUMBER_OF_DIGITS; i++) {
        delete[] temp_arr[i];
    }
 
    delete[] temp_arr;
}
 
template <class ForwardIterator, class Distribution>
void random_array_fill(ForwardIterator begin, ForwardIterator end, Distribution&& dist) {
    std::random_device rd;
    std::mt19937 gen(rd());
    for (; begin != end; ++begin) *begin = dist(gen);
}
 
template <typename ForwardIterator>
void printArray(ostream & os, ForwardIterator begin, ForwardIterator end) {
    for (; begin != end; ++begin) {
        os << *begin << endl;
    }
}
 
int main() {
    const int min_number = 1;
    const int max_number = 100000;
 
    size_t n;
    cout << "Введите размер последовательности: " << endl;
    cin >> n;
 
    int *arr = new int[n];
 
    // Заполняем массив случайными числами
    random_array_fill(arr, arr + n, std::uniform_int_distribution<>(min_number, max_number));
 
    // Пишем рандомный массив в файл
    std::ofstream init_file;
    init_file.open("file1.txt");
    if (init_file.good()) printArray(init_file, arr, arr + n);
    init_file.close();  
 
    // Поиск максимального количества цифр среди чисел массива.
    size_t max_count_of_digits = 0;
    for (size_t i = 0; i < n; i++) {
        max_count_of_digits = max(max_count_of_digits, getCountOfDigits(arr[i]));
    }
 
    // Сортировка по разрядам от младшего к старшему.
    for (unsigned digit_pos = 0; digit_pos < max_count_of_digits; ++digit_pos) {
        radix_sort(arr, n, digit_pos);
    }
 
    // Пишем отсортированный массив в другой файл
    std::ofstream srt_file;
    srt_file.open("file2.txt");
    if (srt_file.good()) printArray(srt_file, arr, arr + n);
    srt_file.close();
 
    return 0;
}
Добавлено через 47 секунд
PS: Я проверил, все работает, файлы пишутся, сортировка выполняется.
2
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 21:22  [ТС]
Блин господи я не туда вставлял опять, спасибо)
Учит, но чет все тяжко идет))) хотя стараюсь но очень много информации, дак еще и другие предметы есть)
Всем большое спасибо)))
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
05.03.2019, 23:32
Цитата Сообщение от jugu Посмотреть сообщение
Я так понял, мне не нужно ничего делать уже?
Прошу прощения за столь вероломное вмешательство. Способ сортировки вижу впервые, интересно стало разобраться. Спасибо вам, что закончили программу и помогли ТС =)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2019, 23:32

Создать генератор случайных чисел с вычеркиванием сгенерированных чисел
Помогите пож. решить задачку: 1 Есть диапазон чисел от 1 до «i» 2 Необходимо выбрать случайное целое число от 1 до «i» = «y» 3...

Генератор случайных чисел на основе ряда натуральных чисел
Подскажите плиз, можно ли из ряда натуральных чисел образовать псевдослучайные числа по следующему алгоритму: 1. записываем ряд...

Ошибка в интроспективной сортировке массива целых чисел по убыванию
Пытаюсь сделать сортировку большого массива целых чисел по убыванию следующим образом: using System; using...

Создать файл из 150 целых чисел, лежащих на отрезке [20,500], используя генератор случайных чисел
Здравствуйте! Помогите, пожалуйста, составить программу с помощью процедур и функций. Создать файл из 150 целых чисел, лежащих на...

Создать файл из 100 целых чисел, лежащих на отрезке [150,9000], используя генератор случайных чисел
Создать файл из 100 целых чисел, лежащих на отрезке , используя генератор случайных чисел. -Вывести эти числа на экран. ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru