Форум программистов, компьютерный форум CyberForum.ru

Перемешивание элементов массива случайным образом - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.61
arthurfok
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 42
20.04.2012, 13:03     Перемешивание элементов массива случайным образом #1
Здравствуйте.
Помогите написать функцию, которая рандомно перемешивает элементы массива.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void PeremeshivanieMassiva(int m[]);
void main()
{
  ...
  int m[9]={1,2,3,4,5,6,7,8,9};
  PeremeshivanieMassiva(m);
  for(int i=0;i<9;i++)
   cout<<m[i]<<",";
 
}
void PeremeshivanieMassiva(int m[])
{
  ??????
  ??????
}
---------------------------------------
должно выводится например:
2,9,1,6,3,4,7,5,8
ну вы меня поняли )))
Заранее Спасибо; // xD
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 13:03     Перемешивание элементов массива случайным образом
Посмотрите здесь:

Сформировать случайным образом масив из 20 элементов C++
Нужно сгенерировать элементы массива случайным образом с помощью функции rand C++
C++ заполнение массива случайным образом
В целочисленном массиве, сгенерированным случайным образом, найти наименьший из положительных элементов. C++
Заполнение массива случайным образом и другие операции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2909 / 1338 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
20.04.2012, 13:10     Перемешивание элементов массива случайным образом #2
Простейший вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <ctime>
#include <cstdlib>
 
using std::cout;
 
void PeremeshivanieMassiva(int m[], int size);
 
int main() {
  int m[9]={1,2,3,4,5,6,7,8,9};
  PeremeshivanieMassiva(m, 9);
  for(int i=0;i<9;i++)
   cout<<m[i]<<",";
  return 0;
}
void PeremeshivanieMassiva(int m[], int size) {
  srand(time(0));
  for (int i = 0; i < size; ++i)
    std::swap(m[i], m[std::rand() % size]);
}
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
20.04.2012, 13:14     Перемешивание элементов массива случайным образом #3
Без STL:
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
void randSort(int *, int);
 
int main()
{
    srand(time(NULL));
    const int size = 9;
    int m[size]={1,2,3,4,5,6,7,8,9};
    randSort(m, size);
    for(int i = 0; i < size; i++)
        std::cout<< m[i] << " ";
        
    system("PAUSE> NULL");
    
    return 0;
}
 
void randSort(int *m, int size)
{
    int buf;
    int pos, pos2;
    for (int i = 0; i < rand() % 50 + 10; i++)
    {
        pos = rand() % size;
        pos2 = rand() % size;
        int buf = m[pos];
        m[pos] = m[pos2];
        m[pos2] = buf;
    }
}
arthurfok
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 42
20.04.2012, 14:06  [ТС]     Перемешивание элементов массива случайным образом #4
Всем спасибо)) но я сам додумался как сделать, и похоже мой более быстрее работает))
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
void PeremeshivanieMassiva(int m[])
{
    int k;
    int p[9];
    int np=0;
    int size=8;
    while(np<9)
    {
        if(size)
            k=rand()%size;
        else
            k=0;
        p[np]=m[k];
        np++;
        UbratElementSMassiva(m,k);
        size--;
    }
    
    
    for(int i=0;i<9;i++)
        m[i]=p[i];
 
}
void UbratElementSMassiva(int m[],int k)
{
    int n[9];
    
    for(int i=0;i<k;i++)
        n[i]=m[i];
    
    for(int q=k+1;q<9;q++)
    {
        n[i]=m[q];
        i++;
    }
 
 
    for(i=0;i<9;i++)
        m[i]=n[i];
 
    
}
Воть))
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
20.04.2012, 14:15     Перемешивание элементов массива случайным образом #5
Цитата Сообщение от arthurfok Посмотреть сообщение
мой более быстрее работает
А с чего? Может вы думаете что если вызовете функцию 9 раз в цикле, программа будет быстрее работать?
arthurfok
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 42
20.04.2012, 14:26  [ТС]     Перемешивание элементов массива случайным образом #6
dimcoder , я посчитал время
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.04.2012, 15:17     Перемешивание элементов массива случайным образом #7
Без велосипедов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <ctime>
 
int main()
{
    srand( time(0) );
    int arr[] = { 1, 2, 3, 4, 5 }, SIZE = sizeof(arr) / sizeof(*arr);
    
    std::random_shuffle(arr, arr + SIZE );
    
    for (int i = 0; i < SIZE; ++i)
        std::cout << arr[i];
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
20.04.2012, 16:40     Перемешивание элементов массива случайным образом #8
для разнообразия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int mad_cmp(const void * a, const void * b) { return rand() - rand(); }
 
int main(){
    const int SIZE(5);
    int arr[SIZE] = { 1, 2, 3, 4, 5 };
    
    srand(time(NULL));
    qsort(arr, SIZE, sizeof(int), mad_cmp);
    for ( int i = 0; i < SIZE; ++i )
        std::cout << arr[i] << ' ';
    std::cout << std::endl;
    
    return 0;
}
но правильнее постом выше. qsort - из С функция.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 12:04     Перемешивание элементов массива случайным образом
Еще ссылки по теме:

C++ Одномерные массивы.Сформировать случайным образом два массива d(10) и a(10)
C++ Перемешивание элементов массива - найти ошибку в коде
В одномерном массиве, состоящем из n вводимых случайным образом целых элементов C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.04.2012, 12:04     Перемешивание элементов массива случайным образом #9
Цитата Сообщение от easybudda Посмотреть сообщение
qsort - из С функция.
Ну есть std::sort в C++.
Yandex
Объявления
21.04.2012, 12:04     Перемешивание элементов массива случайным образом
Ответ Создать тему
Опции темы

Текущее время: 17:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru