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

Отсортировать с случайном порядке элементы массива

14.02.2020, 13:53. Показов 4509. Ответов 10
Метки cpp (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, у меня есть код сортировки, но он все время выдает в отсортированном массиве 0 на индексе 5 ,в оригинальном же массиве (заполяется через рандом) нулей нет. Где тут ошибка? Size я подключил через define,он равен 20.

C++
1
2
3
4
5
6
7
8
9
void randomplacement(int array[]) {
    for (int j = 0; j < SIZE; j++)
    {
            int f = rand() % SIZE;
            array[j] = array[j] + array[f];
            array[f] = array[j] - array[f];
            array[j] = array[j] - array[f]; 
    }
}
upd При size = 10, все работает нормально.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2020, 13:53
Ответы с готовыми решениями:

Переставить элементы массива в случайном порядке
На вход функции подаются итераторы начала и конца массива. Нужно переставлять в цикле первый элемент с рэндомным, таким образом при одних...

Отсортировать элементы массива в алфавитном порядке
отсортировать элементы массива А в алфавитном порядке. Помогите. Плис

Отсортировать в порядке возрастания все положительные элементы массива
В массиве из n вещественных чисел отсортировать в порядке возрастания все положительные элементы. Отрицательные и нулевые элементы оставить...

10
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
14.02.2020, 14:05
Цитата Сообщение от d8veloper Посмотреть сообщение
array[j] = array[j] + array[f];
array[f] = array[j] - array[f];
array[j] = array[j] - array[f];
Если предполагается, что этот код обменивает элементы, то он этого не делает
1
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
14.02.2020, 14:11  [ТС]
elenayagubova, вообще то меняет.Это наиболее оптимальный метод замены местами элементов, не тратиться память на третью переменную.

a = a + b
b = a - b
a = a - b
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
14.02.2020, 14:17
Лучший ответ Сообщение было отмечено d8veloper как решение

Решение

d8veloper, ага, особенно когда j==f
1
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
14.02.2020, 14:27  [ТС]
elenayagubova,А чего такого? Если j == f то элемент array[j] остается на своем месте.Опять же при size= 10 код работает правильно, при 20 все работает,но появляется левый ноль,природу которого я не пойму. И не в индексах,а в самом массиве.

upd Понял твою мысль.
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
14.02.2020, 14:29
d8veloper, ну сделайте вывод построчный и посмотрите, что происходит при равенстве индексов при таком способе обмена. То, что при size=10 все работает, - это чистая псевдослучайность, просто ни разу не произошло ситуации равенства. "Левый ноль" всегда будет появляться при j==f
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.02.2020, 14:30
d8veloper, на всякий случай:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <random>
#include <algorithm>
#include <chrono>
 
int main()
{
    constexpr std::size_t size = 10;
 
    std::default_random_engine dre{
        static_cast<unsigned int>(std::chrono::system_clock::to_time_t(
            std::chrono::system_clock::now() ) ) };
 
    int a[size] {};
    for (int i = 0; i < size; ++i)
        a[i] = i;
 
    std::shuffle(std::begin(a), std::end(a), dre);
 
    return 0;
}
0
0 / 0 / 0
Регистрация: 17.11.2019
Сообщений: 227
14.02.2020, 14:34  [ТС]
elenayagubova, да,я понял мысль.Плюс я забыл добавить еще сранд(). Добавил проверку,теперь работает.Спасибо.

Добавлено через 52 секунды
_stanislav, если бы можно было сделать через готовые функции - я бы не изобретал велосипед)
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.02.2020, 14:35
Цитата Сообщение от d8veloper Посмотреть сообщение
если бы можно было сделать через готовые функции - я бы не изобретал велосипед)
кто тебя знает
0
337 / 237 / 103
Регистрация: 26.03.2019
Сообщений: 407
14.02.2020, 14:37
Цитата Сообщение от d8veloper Посмотреть сообщение
Плюс я забыл добавить еще сранд()
Проверять даже лучше без srand(), чтобы ошибки воспроизводились. В данном случае можно было проследить за индексами и массивом и уловить, где произошло неладное)
1
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.02.2020, 17:12
d8veloper, перемешать массив:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
void RandomPlacement(int *a, int n) 
{
    for(int i = 0; i < n; i++) 
        swap(a[i],a[rand()%n]);
}
 
int main()
{
    srand((int)time(0));
    const int n=9;
    int a[n]={1,2,3,4,5,6,7,8,9};
    
    RandomPlacement(a,n);
        
    for (int i = 0; i < n; i++)             
        cout << a[i] << " ";        
    cout << "\n";
    
system("pause");
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.02.2020, 17:12
Помогаю со студенческими работами здесь

Отсортировать элементы массива в алфавитном порядке используя сортировку вставками
Задан массив А(n) символьных элементов. Отсортировать элементы в алфавитном порядке. Использовать сортировку вставками. Заменить символы...

В массиве А (n) отсортировать элементы массива, стоящие на четных местах, в порядке убывания
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;ctime&gt; #include &lt;algorithm&gt; //В массиве А(n) отсортировать элементы массива,...

Не используя других массивов, отсортировать положительные элементы массива в порядке возрастания
Нужно задать массив В целых чисел. Не используя других массивов, отсортировать положительные элементы массива в порядке возрастания, а...

Отсортировать в порядке возрастания все положительные элементы массива бинарной вставкой
В массиве из вещественных чисел отсортировать в порядке возрастания все положительные элементы. Отрицательные и нулевые элементы оставить...

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru