Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 14

Сортировка методом распределения. Ввод массива

18.12.2014, 01:21. Показов 3023. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть программа которая сортирует методом распределения случайные числа.
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 void sort(int in[], int n)
 {int m,i,max,i0,i1;
 int *v0=new int[n];                // Создать 2 "кармана"
 int *v1=new int[n];
 for (i=0, max=0; i<n; i++)
      if (in[i] > max) max=in[i];   // Определение максимального
 for (m=1; m <=max; m <<=1);        // значащего разряда
 for (m >>=1; m !=0; m >>=1){       // По всем разрядам от старшего
    for (i0=i1=0; i0+i1 < n; )      // Распределение по значению
        if ((in[i0+i1] & m) ==0)    // очередного разряда
            v0[i0] = in[i0+i1], i0++;
        else                        // по карманам
            v1[i1] = in[i0+i1], i1++;
        v0[i0] = v1[i1] = max+1;    // В каждый карман - "затычка"
 for (i0=i1=0; i0+i1 < n; )         // Обычное слияние 
    if (v0[i0] < v1[i1])            // по сравнению значений 
        in[i0+i1] = v0[i0], i0++;   // в последовательности
    else
        in[i0+i1] = v1[i1], i1++;   // max+1 играет роль ограничителя
    } delete []v0; delete []v1;}
 
int  main(){
int i,n=100,*a=new int[n];
srand(time(NULL));
for (i=0; i<n; i++) a[i]=rand()%1000;
sort(a,n);
for (i=0; i<n; i++) cout<<a[i]<<"  ";
puts("");
system ("pause");
 return 0;
 
}
Теперь я хочу сам вводить эти числа. Ввожу массивом. Выводит системную ошибку. В чем моя ошибка. Вот код.
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 void sort(int in[], int n)
 {int m,i,max,i0,i1;
 int *v0=new int[n];                // Создать 2 "кармана"
 int *v1=new int[n];
 for (i=0, max=0; i<n; i++)
      if (in[i] > max) max=in[i];   // Определение максимального
 for (m=1; m <=max; m <<=1);        // значащего разряда
 for (m >>=1; m !=0; m >>=1){       // По всем разрядам от старшего
    for (i0=i1=0; i0+i1 < n; )      // Распределение по значению
        if ((in[i0+i1] & m) ==0)    // очередного разряда
            v0[i0] = in[i0+i1], i0++;
        else                        // по карманам
            v1[i1] = in[i0+i1], i1++;
        v0[i0] = v1[i1] = max+1;    // В каждый карман - "затычка"
 for (i0=i1=0; i0+i1 < n; )         // Обычное слияние 
    if (v0[i0] < v1[i1])            // по сравнению значений 
        in[i0+i1] = v0[i0], i0++;   // в последовательности
    else
        in[i0+i1] = v1[i1], i1++;   // max+1 играет роль ограничителя
    } delete []v0; delete []v1;}
 
int  main(){
    setlocale(LC_ALL, "Russian");
int i,n=100,Size,*a=new int[n];
cout << "Введите размер массива: ";
cin >> Size;
cin.sync();
long *temp = new long[n];
cout << "Ввод массива..."<<endl;
for (int i = 0; i < Size; ++i)
{
    cout << "Введите " << i << " элемент массива: ";
    cin >> a[i];
    cin.sync();
    n+=1;
}
 
 
sort(a,n);
//for (i=0; i<n; i++) cout<<a[i]<<"  ";
puts("");
system ("pause");
 return 0;
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2014, 01:21
Ответы с готовыми решениями:

программа выдает результат только при некоторых значениях (ввод и сортировка массива методом пузырька)
#include &lt;iostream&gt; using namespace std; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int n; cout &lt;&lt; &quot;Ведите...

Сортировка методом распределения
курсовик на тему &quot;сортировка методом распределения&quot; никак не получается,найти программу

сортировка методом подсчета распределения
http://*************/clip/m191762/thumb640/1361381243-clip-47kb.jpg не могу понять как сделать реализацию этого алгоритма.... clip2net....

3
15 / 5 / 1
Регистрация: 17.12.2014
Сообщений: 60
18.12.2014, 04:29
а где константа N объявляется?

ага, нашел, никогда не объявляй указатели в одной строке с переменными.

По поводу проблемы, функция должна выводить ссылку на массив, вот маленький пример

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void* sort(int mas[], int n)
{
    int m;
 
    for (int i = 0; i < n - 1; ++i){
        if (mas[i+1] > mas[i]){
            m = mas[i+1];
            mas[i+1] = mas[i];
            mas[i] = m;
        }
    }
 
   return &mas;
}
1
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 14
18.12.2014, 14:52  [ТС]
Исправил, но программа сортирует только когда вводишь 2 элемента, в остальных случаях просто выводит эти числа.
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
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 void* sort(int in[], int n)
 {int m,i,max,i0,i1;
 int *v0=new int[n];                // Создать 2 "кармана"
 int *v1=new int[n];
 for (i=0, max=0; i<n; i++)
      if (in[i] > max) max=in[i];   // Определение максимального
 for (m=1; m <=max; m <<=1);        // значащего разряда
 for (m >>=1; m !=0; m >>=1){       // По всем разрядам от старшего
    for (i0=i1=0; i0+i1 < n; )      // Распределение по значению
        if ((in[i0+i1] & m) ==0)    // очередного разряда
            v0[i0] = in[i0+i1], i0++;
        else                        // по карманам
            v1[i1] = in[i0+i1], i1++;
        v0[i0] = v1[i1] = max+1;    // В каждый карман - "затычка"
        for (i0=i1=0; i0+i1 < n; )  {       // Обычное слияние 
    if (v0[i0] < v1[i1])            // по сравнению значений 
        in[i0+i1] = v0[i0], i0++;   // в последовательности
    else
        in[i0+i1] = v1[i1], i1++;}  // max+1 играет роль ограничителя
    return &in;
    } delete []v0; delete []v1;}
 
int  main(){
    setlocale(LC_ALL, "Russian");
int i,n,Size;
 
cout << "Введите размер массива: ";
cin >> n;
cin.sync();
int *a=new int[n];
 
cout << "Ввод массива..."<<endl;
for (int i = 0; i < n; ++i)
{
    cout << "Введите " << i << " элемент массива: ";
    cin >> a[i];
    cin.sync();
    
}
 
 
sort(a,n);
for (i=0; i<n; i++) cout<<a[i]<<"  ";
puts("");
system ("pause");
 return 0;
 
}
0
15 / 5 / 1
Регистрация: 17.12.2014
Сообщений: 60
19.12.2014, 04:08
в следующий раз в ставляй код с пробелами для лучшей читабельности

попробуй поиграться с отладчиком, возможно где-то один из циклов обрывается в функции
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2014, 04:08
Помогаю со студенческими работами здесь

Сортировка массива методом выбора. Найти элемент методом двоичного поиска
Напишите программу, работающую с одним массивом из 10 элементов целочисленного типа. Программа просит пользователя заполнить массив целыми...

Сортировка массива методом пузырька и методом выбора
Что значит: сортировка массива методом пузырька и методом выбора.

Сортировка массива пузырьковым методом и методом вставки
нужно написать программу которая будет делать сортировку этими способами в массиве 3x10, две кнопки, таблица (3х10), собственно...

Сортировка массива. Упорядочить нечетные элементы массива по возрастанию методом обмена
Упорядочить одномерный массив по возрастанию, методом обмена. (по возрастанию должны быть толбко нечётные элементы)

Ввод и сортировка массива
Нужно установить количество элементов в массиве и добавлять поочередно свои элемент. Потом отсортировать. На картинке все подробно...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru