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

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

14.02.2020, 13:53. Показов 4547. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru