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

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

20.04.2012, 13:03. Просмотров 6829. Ответов 8
Метки нет (Все метки)

Здравствуйте.
Помогите написать функцию, которая рандомно перемешивает элементы массива.
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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2012, 13:03
Ответы с готовыми решениями:

Перемешивание элементов массива случайным образом
Здравствуйте! Помогите пожалуйста. Нужно перемешать елементы массива случайным...

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

Сформировать случайным образом масив из 20 элементов
Помогите написать прогу на С++ &quot;Сформувати випадковим чином масив із 20...

Заполнение массива случайным образом и другие операции
Нужно объявить массив целых чисел и заполнить его случайными значениями с...

Одномерные массивы.Сформировать случайным образом два массива d(10) и a(10)
Сформировать случайным образом два массива d(10) и a(10). Сложить их. В новом...

8
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
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]);
}
1
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
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;
    }
}
1
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];
 
    
}
Воть))
0
dimcoder
Полярный
467 / 440 / 157
Регистрация: 11.09.2011
Сообщений: 1,142
20.04.2012, 14:15 5
Цитата Сообщение от arthurfok Посмотреть сообщение
мой более быстрее работает
А с чего? Может вы думаете что если вызовете функцию 9 раз в цикле, программа будет быстрее работать?
0
arthurfok
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 42
20.04.2012, 14:26  [ТС] 6
dimcoder , я посчитал время
0
diagon
Higher
1937 / 1203 / 120
Регистрация: 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];
}
1
easybudda
Модератор
Эксперт CЭксперт С++
10093 / 6003 / 1504
Регистрация: 25.07.2009
Сообщений: 11,391
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 - из С функция.
1
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
21.04.2012, 12:04 9
Цитата Сообщение от easybudda Посмотреть сообщение
qsort - из С функция.
Ну есть std::sort в C++.
0
21.04.2012, 12:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2012, 12:04

Задать случайным образом одномерный массив размерности N из целочисленных элементов
Задать случайным образом одномерный массив размерности N из целочисленных...

В одномерном массиве, состоящем из n вводимых случайным образом целых элементов
В одномерном массиве, состоящем из n вводимых случайным образом целых...

Нужно сгенерировать элементы массива случайным образом с помощью функции rand
Нужно сгенерировать элементы случайным образом с помощью функции rand....


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

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

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