1
1
package divideandconquer
2
2
3
- import scala .annotation .tailrec
4
- import util .Utility .swap
5
-
6
3
/*
7
4
An implementation of the quick sort algorithm
8
5
*/
@@ -17,28 +14,9 @@ object QuickSort extends App{
17
14
case Array () | Array (_) => arr
18
15
case _ =>
19
16
val pivotPos = arr.length/ 2
20
- val (newArray, finalPivotPos) = movePivotToCorrectPos(arr, pivotPos)
21
- quickSort(newArray.take(finalPivotPos)) ++ Array (newArray(finalPivotPos)) ++ quickSort(newArray.drop(finalPivotPos + 1 ))
22
- }
23
-
24
- def movePivotToCorrectPos (array : Array [Int ], pivotPos : Int ): (Array [Int ], Int ) = {
25
- val pivot = array(pivotPos)
26
- val lowIndex = 1
27
- val highIndex = array.length - 1
28
-
29
- @ tailrec
30
- def recur (arr : Array [Int ], lI : Int , hI : Int ): (Array [Int ], Int ) =
31
- if (lI > hI) (arr, hI)
32
- else if (arr(lI) > pivot) {
33
- val newArray = swap(arr, lI, hI)
34
- recur(newArray, lI, hI - 1 )
35
- } else {
36
- recur(arr, lI + 1 , hI)
37
- }
17
+ val pivot = arr(pivotPos)
38
18
39
- val mTemp = swap(array, 0 , pivotPos) // move pivot to 0 index
40
- val (newArray, correctPivotPos) = recur(mTemp, lowIndex, highIndex)
41
- val finalArray = swap(newArray, 0 , correctPivotPos) // move pivot to correct pos
42
- (finalArray, correctPivotPos)
19
+ val withoutPivot = arr diff Array (pivot)
20
+ quickSort(withoutPivot.filter(_ < pivot)) ++ Array (pivot) ++ quickSort(withoutPivot.filterNot(_ < pivot))
43
21
}
44
22
}
0 commit comments