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