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

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

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

 

你可能感兴趣的:(Kotlin,算法,面试,排序算法,Kotlin,代码,实例)