基础算法(一)——八大排序算法实现Kotlin

这里写图片描述

/**
 *前面七大排序为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
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值