[Kotlin]实现八大排序算法·已封装·代码实例

来源:互联网 发布:埋雷软件 编辑:程序博客网 时间:2024/06/11 10:45

>八大排序算法分别是:

  • 插入排序:直接插入排序希尔排序
  • 选择排序:简单选择排序堆排序
  • 交换排序:冒泡排序快速排序
  • 归并排序
  • 桶排/基数排序
    稳定的排序方法有:直接插入排序、冒泡排序、桶排

    所有算法均已封装好,可以直接使用。到此下载:

http://download.csdn.net/download/shenpibaipao/9940817

>扩展性及抽象结构

    介绍一下整个算法的策略类:

abstract class SortStrategy{    enum class Order{        ASC,DEC    }    enum class IsStable{        Unstable,Stable    }    var order = Order.ASC    //算法是否稳定    abstract val isStable:IsStable    //需要实现的排序方法    protected abstract fun<T> sort(ary:Array<T>) where T : Number ,T :Comparable<T>    fun<T> sortASC(ary:Array<T>) where T : Number ,T :Comparable<T>{        order = Order.ASC        sort(ary)    }    @Suppress("NOTHING_TO_INLINE")    protected inline fun<T> balance(t1:T, t2:T):Boolean where T : Number, T:Comparable<T>{        return when(order){            Order.ASC -> t1 > t2            Order.DEC -> t1 < t2        }    }    fun<T> sortDEC(ary:Array<T>) where T : Number , T :Comparable<T>{        order = Order.DEC        sort(ary)    }    fun<T> findMax(ary:Array<T>):T where T : Number , T :Comparable<T>{        order = Order.DEC        sort(ary)        return ary[0]    }    fun<T> findMin(ary:Array<T>):T where T : Number , T :Comparable<T>{        order = Order.ASC        sort(ary)        return ary[0]    }    fun<T> getSortTime(ary:Array<T>):Long where T : Number , T :Comparable<T>{        val useTime = measureTimeMillis { sort(ary.clone()) }        println("使用该算法排序大小为${ary.size}的数组用时: $useTime ms")        return useTime    }    fun getStable(){        when(isStable){            IsStable.Stable -> println("该算法稳定")            else -> println("该算法不稳定")        }    }    fun<T> Array<T>.swap(first:Int,last:Int) where T : Number , T :Comparable<T>{        if ( first == last ) return        val temp = this[first]        this[first] = this[last]        this[last] = temp    }    fun<T> Array<T>.print() where T : Number , T :Comparable<T>{        println()        this.forEach { print("$it ") }    }}

    要扩展排序算法库,只需要继承这个抽象类,并重写Sort()方法即可,其中,在比较大小的地方需要直接调用balance(t1,t2),在升序情况下,t1大于t2时返回真值。基于balance()完成sort方法后,可以自动完成按升序排序和按降序排序的方法。

    已完成的八大排序算法的扩展可以到这里下载:http://download.csdn.net/download/shenpibaipao/9940817



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为c199手机不停重启怎么办 华为手机用户数据被锁定怎么办 朵唯手机丢了怎么办 网件r6220穿墙差怎么办 无线网打王者卡怎么办 酷翼x9忘了密码怎么办 楼上的路由器楼下不好使怎么办 电信4g网络不好怎么办 农村只有2g网怎么办 电信卡4g网速慢怎么办 小米手机触屏失灵怎么办 荣耀v10电信网速很慢怎么办 华为路由器掉线了怎么办 三星s6只识别一张卡怎么办 华为手机卡不显示了怎么办 华为账号手机卡丢了怎么办 荣耀8耗电量太快怎么办 vivo卡2不显示怎么办 电信宽带玩王者荣耀卡怎么办 联通4g玩游戏卡怎么办 华为悦盒遥控器丢了怎么办 6s不能用电信卡怎么办 iphone6电信卡无服务怎么办 魅族手机电信卡怎么办 小米手机读不出sim卡怎么办 魅蓝note6耗电快怎么办 oppo手机下载密码忘了怎么办 华为v9玩飞车卡怎么办 苹果7耳机转换器不支持怎么办 华为mate10耳机声音小怎么办 200打一年到期了怎么办 手机欠费变成2g怎么办 手机4g网用不了怎么办 手机玩王者荣耀卡怎么办 华为隐私空间密码忘记了怎么办 华为手机王者太卡怎么办 华为手机太卡怎么办呢 华为手机5x太卡!怎么办 华为手机玩游戏时太卡了怎么办? 买到华为翻新机怎么办 华为畅享8声音小怎么办