/**
*前面七大排序为Kotlin,基数排序为java,在最后面
*/
fun main(array: Array<String>){
val a = intArrayOf(2,5,3,7,9,8,1,6,4)
println("插入排序:")
insertSort(a).forEach {
println(it)
}
println("冒泡排序:")
bubbleSort(a).forEach {
println(it)
}
println("选择排序:")
selectedSort(a).forEach {
println(it)
}
println("希尔排序:")
shellSort(a).forEach {
println(it)
}
println("快速排序:")
quickSort1(a,0,a.size-1).forEach {
println(it)
}
println("归并排序")
mergeSort(a,0,a.size-1).forEach {
println(it)
}
println("堆排序")
heapSort(a).forEach {
println(it)
}
}
/**
* 插入排序,没什么好说的,数据越有序效率越好
*/
fun insertSort(s: IntArray): IntArray{
for(i in 1..(s.size-1)){
var temp = s[i]
var j = i-1
while (j >= 0 && temp<s[j]){
s[j+1] = s[j]
j--
}
s[j+1] = temp
}
return s
}
/**
* 快速排序注意i 永远 不会等于 j,最后只会大于,即交叉
* 两种情况i=j,即数组所有元素全部有序,还有length=2
* 优化,到一定元素个数采取插入排序,或者采取三位取中,即从start,mid和end找出
*中间元素作为base,这样子能保证每次都是双边划分,而双边划分都是nlog2N的复杂度
*/
fun quickSort1(s: IntArray,left: Int,right: Int): IntArray{
if(left>=right) return s
val base = s[left]
var i=left+1
var j=right
//比如数组长度为2,i=j
while(i<=j){
//i=j当数组有序的时候,此时划分是单边的,复杂度最高,为n*n
基础算法(一)——八大排序算法实现Kotlin
最新推荐文章于 2024-04-23 10:52:00 发布
本文详细介绍了使用Kotlin编程语言实现的八大经典排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、希尔排序和计数排序。通过实例解析每种算法的原理和代码实现,帮助读者深入理解排序算法的内在逻辑。
摘要由CSDN通过智能技术生成