Skip to content

Instantly share code, notes, and snippets.

@mirasrael
Created November 17, 2018 11:36
Show Gist options
  • Save mirasrael/cc3ddf0f03f695abacd3ef2bc31531d5 to your computer and use it in GitHub Desktop.
Save mirasrael/cc3ddf0f03f695abacd3ef2bc31531d5 to your computer and use it in GitHub Desktop.
Quick Sort on Kotlin
/**
* Date: 11/15/2018
* Time: 21:45
*/
fun main(args: Array<String>) {
assertArrayEquals(longArrayOf(), qSort(longArrayOf()))
assertArrayEquals(longArrayOf(1), qSort(longArrayOf(1)))
assertArrayEquals(longArrayOf(1, 2), qSort(longArrayOf(2, 1)))
assertArrayEquals(longArrayOf(1, 2, 3), qSort(longArrayOf(2, 3, 1)))
assertArrayEquals(longArrayOf(1, 1, 1, 1, 3, 3, 3), qSort(longArrayOf(3, 1, 1, 3, 1, 3, 1)))
assertArrayEquals(longArrayOf(1, 2, 3, 4, 8, 9, 16), qSort(longArrayOf(4, 16, 2, 3, 1, 9, 8)))
assertArrayEquals(longArrayOf(2, 4, 8, 9, 10, 11, 16), qSort(longArrayOf(4, 16, 2, 10, 11, 9, 8)))
assertArrayEquals(longArrayOf(1, 1, 1, 3, 3), qSort(longArrayOf(1, 3, 1, 3, 1)))
}
fun qSort(input: LongArray): LongArray = qSort(input, 0, input.size - 1)
fun qSort(input: LongArray, startIndex: Int, endIndex: Int): LongArray {
if (startIndex >= endIndex) return input
val mid = input[(endIndex + startIndex) / 2]
var i = startIndex
var j = endIndex
while (i < j) {
while (input[i] < mid) {
i++
}
while (input[j] > mid) {
j--
}
if (i < j) {
swap(input, i, j)
if (input[i] < mid) {
i++
} else {
j--
}
}
}
assert(i == j)
qSort(input, startIndex, i - 1)
qSort(input, i + 1, endIndex)
return input
}
fun swap(input: LongArray, index1: Int, index2: Int) {
val tmp = input[index1]
input[index1] = input[index2]
input[index2] = tmp
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment