From 69f4171b4b688a696c3eae0ed764ce6b4ca579a7 Mon Sep 17 00:00:00 2001 From: Alan Souza Fagundes Date: Mon, 31 Oct 2022 22:01:24 -0300 Subject: [PATCH] Adding merge sort in scala --- sort/merge_sort/scala/MergeSort.scala | 44 +++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 sort/merge_sort/scala/MergeSort.scala diff --git a/sort/merge_sort/scala/MergeSort.scala b/sort/merge_sort/scala/MergeSort.scala new file mode 100644 index 0000000000..4e031f2234 --- /dev/null +++ b/sort/merge_sort/scala/MergeSort.scala @@ -0,0 +1,44 @@ +object MergeSort { + + def merge(leftArr: Array[Int], rightArr: Array[Int]) = { + var leftIndex = 0 + var rightIndex = 0 + + var sortedArr = Array.empty[Int] + + while (leftIndex < leftArr.length && rightIndex < rightArr.length) { + if (leftArr(leftIndex) < rightArr(rightIndex)) { + sortedArr = sortedArr.appended(leftArr(leftIndex)) + leftIndex += 1 + } else { + sortedArr = sortedArr.appended(rightArr(rightIndex)) + rightIndex += 1 + } + } + + val restLeft = leftArr.slice(leftIndex, leftArr.length) + val restRight = rightArr.slice(rightIndex, rightArr.length) + + sortedArr ++ restLeft ++ restRight + } + + def mergeSort(arr: Array[Int]): Array[Int] = { + if (arr.length <= 1) return arr + + val mid = arr.length / 2 + var (left, right) = arr.splitAt(mid) + + left = mergeSort(left) + right = mergeSort(right) + + merge(left, right) + } + + + def main(args: Array[String]): Unit = { + val arr = Array(11, 3, 1, 13, 4, 5, 12, 9, 2, 6, 8, 7, 10) + val sortedArray = mergeSort(arr) + println(sortedArray.mkString(", ")) + } + +}