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

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

04.03.2019, 16:04. Просмотров 1386. Ответов 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)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.03.2019, 16:04
Ответы с готовыми решениями:

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

помогите с поразрядной сортировкой
необходимо отсортировать методом поразрядной сортировки слова естественного языка.никак не...

Метод поразрядной сортировки.
Помогите решить задачу, для её решения необходимо реализовать метод поразрядной сортировки,...

Проблемы с поразрядной сортировкой msd
#include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;clocale&gt; using namespace std; int main(int...

Генератор чисел
Народ подскажыте пожалуста как создать свой генератор чисел.

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от jugu Посмотреть сообщение
отсортированный массив.
Да, только поразрядным алгоритмом сортировка. Пропускает несколько цифр моя сортировка, не могу понять с чем связано
0
04.03.2019, 22:32
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
04.03.2019, 22:32 25
Цитата Сообщение от myfurms Посмотреть сообщение
Да все верно.
Лады, завтра сделаем.
1
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
04.03.2019, 23:24 26
Цитата Сообщение от 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
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 09:40  [ТС] 27
Цитата Сообщение от valen10 Посмотреть сообщение
просто оставлю этот код здесь, сравните его со своим вариантом.
Ваш код выглядит намного лучше моего))) но я ведь только учусь) много чего не знаю,но смотрю ролики на ютубе) Спасибо)
Мне осталось только сделать вывод в два файла и
Цитата Сообщение от valen10 Посмотреть сообщение
const int max_number = 100000;
вот это старочка max_number должнга равняться n
Цитата Сообщение от valen10 Посмотреть сообщение
cout << "Введите размер последовательности: " << endl;
* * cin >> n;
Добавлено через 2 минуты
Цитата Сообщение от jugu Посмотреть сообщение
Лады, завтра сделаем.
Спасибо огромное за то что помогли разобраться и уделили мне время)
0
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
05.03.2019, 10:05 28
Цитата Сообщение от valen10 Посмотреть сообщение
myfurms, просто оставлю этот код здесь, сравните его со своим вариантом.
Я так понял, мне не нужно ничего делать уже?
0
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 13:26  [ТС] 29
Цитата Сообщение от 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
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
05.03.2019, 17:35 30
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
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 19:39  [ТС] 31
Цитата Сообщение от jugu Посмотреть сообщение
Делаем так:
так а как в файл записать то? какой синтаксис с этой строчкой
Цитата Сообщение от jugu Посмотреть сообщение
printArray(arr, arr + n);
Я выше писал свои варианты у меня не получалось
0
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
05.03.2019, 20:14 32
Цитата Сообщение от 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
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 20:25  [ТС] 33
Цитата Сообщение от jugu Посмотреть сообщение
ostream & os
а что вот это означает?
0
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
05.03.2019, 20:27 34
Цитата Сообщение от myfurms Посмотреть сообщение
а что вот это означает?
Это ссылка на выходной поток. Сюда можно подставить cout или любой другой поток вывода.
0
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 20:32  [ТС] 35
Цитата Сообщение от jugu Посмотреть сообщение
любой другой поток вывода.
а как сделать тогда чтоб в файл выводило , если так как я делал ты говоришь не правильно
0
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
05.03.2019, 20:38 36
Цитата Сообщение от 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
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 21:07  [ТС] 37
Я запутался
0
jugu
213 / 138 / 26
Регистрация: 11.01.2019
Сообщений: 564
05.03.2019, 21:16 38
Лучший ответ Сообщение было отмечено 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
myfurms
1 / 1 / 0
Регистрация: 27.02.2019
Сообщений: 35
05.03.2019, 21:22  [ТС] 39
Блин господи я не туда вставлял опять, спасибо)
Учит, но чет все тяжко идет))) хотя стараюсь но очень много информации, дак еще и другие предметы есть)
Всем большое спасибо)))
0
valen10
Параллельный Кот
1264 / 532 / 211
Регистрация: 25.03.2016
Сообщений: 1,186
Завершенные тесты: 1
05.03.2019, 23:32 40
Цитата Сообщение от jugu Посмотреть сообщение
Я так понял, мне не нужно ничего делать уже?
Прошу прощения за столь вероломное вмешательство. Способ сортировки вижу впервые, интересно стало разобраться. Спасибо вам, что закончили программу и помогли ТС =)
0
05.03.2019, 23:32
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.03.2019, 23:32

генератор чисел
Прошу Вас помочь мне в написание лабораторной работы, мне нужна на языке С Написать генератор...

Генератор чисел!
Всем доброго времени суток. Нужна помощь, является задача сгенерировать матрицуNхM случайных чисел...

генератор чисел
здравствуйте, уважаемые форумчане! есть вопрос - возможно ли сделать генератор случайных чисел с...


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

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

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