1
- let arr = Array . from ( { length :20 } , ( ) => Math . floor ( Math . random ( ) * 20 ) )
2
- console . log ( arr ) ;
1
+ let arr = Array . from ( { length :20 } , ( ) => Math . floor ( Math . random ( ) * 20 ) )
2
+ // console.log(arr);
3
+ var array1 = [ 9 , 2 , 5 , 6 , 4 , 3 , 7 , 10 , 1 , 8 ] ;
3
4
4
5
// swap helper function
5
6
swap = ( arr , i , j ) => {
@@ -15,25 +16,47 @@ bubbleSortBasicAscending = (arr) => {
15
16
for ( let i = 0 ; i < arr . length ; i ++ ) {
16
17
for ( let j = 1 ; j < arr . length ; j ++ ) {
17
18
if ( arr [ j ] < arr [ j - 1 ] ) {
18
- swap ( arr , j , j - 1 ) ;
19
+ swap ( arr , j , j - 1 ) ;
19
20
}
20
21
}
21
22
}
22
23
return arr ;
23
24
}
24
25
25
- console . log ( bubbleSortBasicAscending ( arr ) ) ;
26
+ console . log ( bubbleSortBasicAscending ( array1 ) ) ;
26
27
27
28
bubbleSortBasicDescending = ( arr ) => {
28
29
29
30
for ( let i = 0 ; i < arr . length ; i ++ ) {
30
31
for ( let j = 1 ; j < arr . length ; j ++ ) {
31
32
if ( arr [ j ] > arr [ j - 1 ] ) {
32
- swap ( arr , j , j - 1 ) ;
33
+ swap ( arr , j , j - 1 ) ;
33
34
}
34
35
}
35
36
}
36
37
return arr ;
37
38
}
38
39
39
- console . log ( bubbleSortBasicDescending ( arr ) ) ;
40
+ console . log ( bubbleSortBasicDescending ( array1 ) ) ;
41
+
42
+ /* A more optimal solution, by reducing some of the loop execution are not done in this solution.
43
+ So, here, I only do the loops and swaps for the cases when I find a mis-placed element, i.e. larger-element placed before smaller in an ascending sort
44
+ */
45
+ bubbleSortAscending = arr => {
46
+
47
+ let swapped ;
48
+
49
+ do {
50
+ swapped = false ;
51
+ for ( let i = 0 ; i < arr . length ; i ++ ) {
52
+ if ( arr [ i ] && arr [ i + 1 ] && ( arr [ i ] > arr [ i + 1 ] ) ) {
53
+ swap ( arr , i , i + 1 ) ;
54
+ swapped = true ;
55
+ }
56
+ }
57
+ } while ( swapped )
58
+ return arr ;
59
+ }
60
+
61
+
62
+ console . log ( bubbleSortAscending ( array1 ) ) ;