Skip to content

Commit 76951f7

Browse files
committed
随机洗牌算法
1 parent ce87d51 commit 76951f7

1 file changed

Lines changed: 88 additions & 0 deletions

File tree

algorithms/shuffle.cpp

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
#include <iostream>
2+
#include <ctime>
3+
4+
using namespace std;
5+
6+
void
7+
swap(int &a, int &b)
8+
{
9+
int tmp = a;
10+
a = b;
11+
b = tmp;
12+
}
13+
14+
void
15+
bubble_sort(int *a, int size)
16+
{
17+
int i = 0;
18+
int j = 0;
19+
int tmp = 0;
20+
21+
for (i = 0; i < size - 1; i++)
22+
{
23+
for (j = 0; j < size - 1 - i; j++)
24+
{
25+
if (a[j] < a[j+1])
26+
{
27+
swap(a[j], a[j+1]);
28+
}
29+
}
30+
}
31+
}
32+
33+
void
34+
bubble_based_shuffle(int *a, int size)
35+
{
36+
int i = 0;
37+
int j = 0;
38+
int tmp = 0;
39+
40+
for (i = 0; i < size - 1; i++)
41+
{
42+
for (j = 0; j < size - 1 - i; j++)
43+
{
44+
if ((a[j] + a[j+1]) % 2 == 0)
45+
{
46+
swap(a[j], a[j+1]);
47+
}
48+
}
49+
}
50+
}
51+
52+
void
53+
random_shuffle(int *a, int size)
54+
{
55+
int i = 0;
56+
int index = 0;
57+
srand((unsigned)time(0));
58+
59+
for(i = 0; i < size; i++)
60+
{
61+
index = rand() % (size-i) + i;
62+
swap(a[i], a[index]);
63+
}
64+
}
65+
66+
void
67+
print(int *a, int size)
68+
{
69+
int i = 0;
70+
for (i = 0; i < size; i++)
71+
{
72+
cout << a[i] << ", " << endl;
73+
}
74+
cout << endl;
75+
}
76+
77+
int main(void)
78+
{
79+
int a[] = {8, 2, 6, 3, 4, 5, 9, 0, 1, 7};
80+
bubble_based_shuffle(a, 10);
81+
print(a, 10);
82+
bubble_sort(a, 10);
83+
print(a, 10);
84+
random_shuffle(a, 10);
85+
print(a, 10);
86+
87+
return 0;
88+
}

0 commit comments

Comments
 (0)