Skip to content

Commit 18f1a48

Browse files
committed
init: first commit
0 parents commit 18f1a48

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

src/array.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use rand::Rng;
2+
3+
pub fn init() -> Vec<i32> {
4+
let n = 10000;
5+
let mut array = Vec::new();
6+
7+
let mut rng = rand::thread_rng();
8+
for _ in 0..n {
9+
array.push(rng.gen_range(0, n));
10+
}
11+
12+
array
13+
}

src/bubble.rs

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
use time::PreciseTime;
2+
3+
// 冒泡
4+
fn bubble(val: &Vec<i32>) -> Vec<i32> {
5+
let mut value = val.clone();
6+
for i in 0..value.len() {
7+
for m in 0..value.len() - 1 - i {
8+
if value[m] > value[m + 1] {
9+
let temp = value[m];
10+
value[m] = value[m + 1];
11+
value[m + 1] = temp;
12+
}
13+
}
14+
}
15+
value
16+
}
17+
18+
// 优化1
19+
fn bubble1(val: &Vec<i32>) -> Vec<i32> {
20+
let mut value = val.clone();
21+
for i in 0..value.len() {
22+
let mut flag = 0;
23+
for m in 0..value.len() - 1 - i {
24+
if value[m] > value[m + 1] {
25+
let temp = value[m];
26+
value[m] = value[m + 1];
27+
value[m + 1] = temp;
28+
flag = 1;
29+
}
30+
}
31+
if flag == 0 {
32+
return value
33+
}
34+
}
35+
value
36+
}
37+
38+
// 优化1+2
39+
fn bubble2(val: &Vec<i32>) -> Vec<i32> {
40+
let mut value = val.clone();
41+
let mut last_change = value.len() - 1;
42+
for _ in 0..value.len() {
43+
let mut flag = 0;
44+
for m in 0..last_change {
45+
if value[m] > value[m + 1] {
46+
let temp = value[m];
47+
value[m] = value[m + 1];
48+
value[m + 1] = temp;
49+
flag = 1;
50+
last_change = m + 1;
51+
}
52+
}
53+
if flag == 0 {
54+
return value
55+
}
56+
}
57+
value
58+
}
59+
60+
pub fn test(array_value: &Vec<i32>) {
61+
println!("Start test bubble sort");
62+
63+
let start_bubble = PreciseTime::now();
64+
let a = bubble(&array_value);
65+
let end_bubble = PreciseTime::now();
66+
println!("bubble take time {}", start_bubble.to(end_bubble));
67+
68+
let start_bubble = PreciseTime::now();
69+
let b = bubble1(&array_value);
70+
let end_bubble = PreciseTime::now();
71+
println!("bubble1 take time {}", start_bubble.to(end_bubble));
72+
73+
let start_bubble = PreciseTime::now();
74+
let c = bubble2(&array_value);
75+
let end_bubble = PreciseTime::now();
76+
println!("bubble2 take time {}", start_bubble.to(end_bubble));
77+
78+
// println!("{:?}", a);
79+
// println!("{:?}", b);
80+
// println!("{:?}", c);
81+
println!("{}, {}", a == b, b == c);
82+
}

0 commit comments

Comments
 (0)