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

>八大排序算法分别是:

  • 插入排序:直接插入排序希尔排序
  • 选择排序:简单选择排序堆排序
  • 交换排序:冒泡排序快速排序
  • 归并排序
  • 桶排/基数排序

    稳定的排序方法有:直接插入排序、冒泡排序、桶排

 

所有算法均已封装好,可以直接使用。到此下载: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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值