С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.61
arthurfok
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 42
#1

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

20.04.2012, 13:03. Просмотров 5547. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемешивание элементов массива случайным образом (C++):

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

заполнение массива случайным образом - C++
Помогите на языке Си заполнить массив символов случайным образом символами с кодами в диапазоне от 21 до 254

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

Заполнение массива случайным образом и другие операции - C++
Нужно объявить массив целых чисел и заполнить его случайными значениями с помощью randomize и random(возможно srand) Причем, размер массива...

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

Задать случайным образом одномерный массив размерности N из целочисленных элементов - C++
Задать случайным образом одномерный массив размерности N из целочисленных элементов, принадлежащих отрезку . Выполнить задание своего...

8
lemegeton
2925 / 1354 / 135
Регистрация: 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
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
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
Полярный
466 / 439 / 68
Регистрация: 11.09.2011
Сообщений: 1,138
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
1932 / 1198 / 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];
}
1
easybudda
Модератор
Эксперт CЭксперт С++
9699 / 5649 / 964
Регистрация: 25.07.2009
Сообщений: 10,872
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
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
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 вводимых случайным образом целых элементов - C++
В одномерном массиве, состоящем из n вводимых случайным образом целых элементов, вычислить сумму положительных элементов массива.

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

В массиве, сформированном случайным образом, найти количество элементов, удовлетворяющих условию - C++
Переделать код программы, используя динамический массив. В массиве b(25), сформированном случайным образом, найти количество элементов,...

В массиве b(25), сформированном случайным образом, найти количество элементов, удовлетворяющих условию - C++
В массиве b(25), сформированном случайным образом, найти количество элементов, удовлетворяющих условию l&lt;b&lt;m, где l и m - заданные...


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

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

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