Data update
This commit is contained in:
parent
81fd053722
commit
52a6ef48dd
10248 changed files with 63654 additions and 6775 deletions
45
Task/Quickselect-algorithm/Kotlin/quickselect-algorithm.kts
Normal file
45
Task/Quickselect-algorithm/Kotlin/quickselect-algorithm.kts
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
// version 1.1.2
|
||||
|
||||
const val MAX = Int.MAX_VALUE
|
||||
val rand = java.util.Random()
|
||||
|
||||
fun partition(list:IntArray, left: Int, right:Int, pivotIndex: Int): Int {
|
||||
val pivotValue = list[pivotIndex]
|
||||
list[pivotIndex] = list[right]
|
||||
list[right] = pivotValue
|
||||
var storeIndex = left
|
||||
for (i in left until right) {
|
||||
if (list[i] < pivotValue) {
|
||||
val tmp = list[storeIndex]
|
||||
list[storeIndex] = list[i]
|
||||
list[i] = tmp
|
||||
storeIndex++
|
||||
}
|
||||
}
|
||||
val temp = list[right]
|
||||
list[right] = list[storeIndex]
|
||||
list[storeIndex] = temp
|
||||
return storeIndex
|
||||
}
|
||||
|
||||
tailrec fun quickSelect(list: IntArray, left: Int, right: Int, k: Int): Int {
|
||||
if (left == right) return list[left]
|
||||
var pivotIndex = left + Math.floor((rand.nextInt(MAX) % (right - left + 1)).toDouble()).toInt()
|
||||
pivotIndex = partition(list, left, right, pivotIndex)
|
||||
if (k == pivotIndex)
|
||||
return list[k]
|
||||
else if (k < pivotIndex)
|
||||
return quickSelect(list, left, pivotIndex - 1, k)
|
||||
else
|
||||
return quickSelect(list, pivotIndex + 1, right, k)
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val list = intArrayOf(9, 8, 7, 6, 5, 0, 1, 2, 3, 4)
|
||||
val right = list.size - 1
|
||||
for (k in 0..9) {
|
||||
print(quickSelect(list, 0, right, k))
|
||||
if (k < 9) print(", ")
|
||||
}
|
||||
println()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue