September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -0,0 +1,49 @@
|
|||
// version 1.1.2
|
||||
|
||||
fun <T : Comparable<T>> isSorted(list: List<T>): Boolean {
|
||||
val size = list.size
|
||||
if (size < 2) return true
|
||||
for (i in 1 until size) {
|
||||
if (list[i] < list[i - 1]) return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
fun <T : Comparable<T>> permute(input: List<T>): List<List<T>> {
|
||||
if (input.size == 1) return listOf(input)
|
||||
val perms = mutableListOf<List<T>>()
|
||||
val toInsert = input[0]
|
||||
for (perm in permute(input.drop(1))) {
|
||||
for (i in 0..perm.size) {
|
||||
val newPerm = perm.toMutableList()
|
||||
newPerm.add(i, toInsert)
|
||||
perms.add(newPerm)
|
||||
}
|
||||
}
|
||||
return perms
|
||||
}
|
||||
|
||||
fun <T : Comparable<T>> permutationSort(input: List<T>): List<T> {
|
||||
if (input.size == 1) return input
|
||||
val toInsert = input[0]
|
||||
for (perm in permute(input.drop(1))) {
|
||||
for (i in 0..perm.size) {
|
||||
val newPerm = perm.toMutableList()
|
||||
newPerm.add(i, toInsert)
|
||||
if (isSorted(newPerm)) return newPerm
|
||||
}
|
||||
}
|
||||
return input
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val input = listOf('d', 'b', 'e', 'a', 'f', 'c')
|
||||
println("Before sorting : $input")
|
||||
val output = permutationSort(input)
|
||||
println("After sorting : $output")
|
||||
println()
|
||||
val input2 = listOf("first", "second", "third", "fourth", "fifth", "sixth")
|
||||
println("Before sorting : $input2")
|
||||
val output2 = permutationSort(input2)
|
||||
println("After sorting : $output2")
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue