File tree 2 files changed +17
-9
lines changed
src/algorithms/sorting/quick-sort
2 files changed +17
-9
lines changed Original file line number Diff line number Diff line change @@ -14,13 +14,21 @@ export default class QuickSort extends Sort {
14
14
return array ;
15
15
}
16
16
17
- // Init left and right arrays.
17
+ // Init left, center, and right arrays.
18
18
const leftArray = [ ] ;
19
19
const rightArray = [ ] ;
20
-
21
- // Take the first element of array as a pivot.
22
- const pivotElement = array . shift ( ) ;
23
- const centerArray = [ pivotElement ] ;
20
+ const centerArray = [ ] ;
21
+
22
+ // Take the median element of first, mid, and last elements.
23
+ let pivotElement = array [ 0 ] ;
24
+ const mid = Math . floor ( array . length / 2 ) ;
25
+ if ( ( array [ mid ] < array [ array . length - 1 ] && array [ mid ] > array [ 0 ] )
26
+ || ( array [ mid ] > array [ array . length - 1 ] && array [ mid ] < array [ 0 ] ) ) {
27
+ pivotElement = array [ mid ] ;
28
+ } else if ( ( array [ array . length - 1 ] < array [ mid ] && array [ array . length - 1 ] > array [ 0 ] )
29
+ || ( array [ array . length - 1 ] > array [ mid ] && array [ array . length - 1 ] < array [ 0 ] ) ) {
30
+ pivotElement = array [ array . length - 1 ] ;
31
+ }
24
32
25
33
// Split all array elements between left, center and right arrays.
26
34
while ( array . length ) {
Original file line number Diff line number Diff line change @@ -8,10 +8,10 @@ import {
8
8
} from '../../SortTester' ;
9
9
10
10
// Complexity constants.
11
- const SORTED_ARRAY_VISITING_COUNT = 190 ;
12
- const NOT_SORTED_ARRAY_VISITING_COUNT = 62 ;
13
- const REVERSE_SORTED_ARRAY_VISITING_COUNT = 190 ;
14
- const EQUAL_ARRAY_VISITING_COUNT = 19 ;
11
+ const SORTED_ARRAY_VISITING_COUNT = 66 ;
12
+ const NOT_SORTED_ARRAY_VISITING_COUNT = 83 ;
13
+ const REVERSE_SORTED_ARRAY_VISITING_COUNT = 66 ;
14
+ const EQUAL_ARRAY_VISITING_COUNT = 20 ;
15
15
16
16
describe ( 'QuickSort' , ( ) => {
17
17
it ( 'should sort array' , ( ) => {
You can’t perform that action at this time.
0 commit comments