>八大排序算法分别是:
- 插入排序:直接插入排序、希尔排序
- 选择排序:简单选择排序、堆排序
- 交换排序:冒泡排序、快速排序
- 归并排序
- 桶排/基数排序
稳定的排序方法有:直接插入排序、冒泡排序、桶排
所有算法均已封装好,可以直接使用。到此下载: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