sort 包
介绍
sort 包提供数组类型的排序函数。
主要接口
interface SortExtension
public interface SortExtension
此接口作为排序相关的辅助接口,内部为空。
interface SortByExtension
public interface SortByExtension
此接口作为排序相关的辅助接口,内部为空。
extend Array <: SortByExtension
extend Array<T> <: SortByExtension
此扩展用于实现 Array 的 sortBy 函数。
func sortBy
public func sortBy(stable!: Bool = false, comparator!: (T, T) -> Ordering): Unit
功能:通过传入的比较函数,根据其返回值 Ordering
类型的结果,可对数组进行自定义排序。
参数:
stable
:是否使用稳定排序comparator
:用户传入的比较函数,如,comparator: (t1: T, t2: T) -> Ordering
,如果comparator
的返回值为Ordering.GT
,排序后t1
在t2
后;如果comparator
的返回值为Ordering.LT
,排序后t1
在t2
前;如果comparator
的返回值为Ordering.EQ
,且为稳定排序那么t1
与t2
的位置较排序前保持不变; 如果comparator
的返回值为Ordering.EQ
,且为不稳定排序,那么t1
,t2
顺序不确定
extend Array <: SortExtension
extend Array<T> <: SortExtension where T <: Comparable<T>
此扩展用于实现 Array
的 sort/sortDescending
函数。
func sort
public func sort(stable!: Bool = false): Unit
功能:以升序的方式排序 Array
。
参数:
stable
:是否使用稳定排序
func sortDescending
public func sortDescending(stable!: Bool = false): Unit
功能:以降序的方式排序 Array
。
参数:
stable
:是否使用稳定排序
func unstableSort
public func unstableSort<T>(data: Array<T>): Unit where T <: Comparable<T>
功能:对数组进行不稳定升序排序。
参数:
data
:需要排序的数组
func unstableSort
public func unstableSort<T>(data: Array<T>, comparator: (T, T) -> Ordering): Unit
功能:对数组进行不稳定排序。
参数:
data
:需要排序的数组comparator
:用户传入的比较函数,如,comparator: (t1: T, t2: T) -> Ordering
,如果comparator
的返回值为Ordering.GT
,排序后t1
在t2
后;如果comparator
的返回值为Ordering.LT
,排序后t1
在t2
前;如果comparator
的返回值为Ordering.EQ
,排序后t1
,t2
顺序不确定
func stableSort
public func stableSort<T>(data: Array<T>): Unit where T <: Comparable<T>
功能:对数组进行稳定升序排序。
参数:
data
:需要排序的数组
func stableSort
public func stableSort<T>(data: Array<T>, comparator: (T, T) -> Ordering): Unit
功能:对数组进行稳定排序。
参数:
data
:需要排序的数组comparator
:用户传入的比较函数,如,comparator: (t1: T, t2: T) -> Ordering
,如果comparator
的返回值为Ordering.GT
,排序后t1
在t2
后;如果comparator
的返回值为Ordering.LT
,排序后t1
在t2
前;如果comparator
的返回值为Ordering.EQ
,排序后t1
与t2
的位置较排序前保持不变
示例
对 Array 进行排序
下面是创建 Array,并使用 random 库提供的随机数来得到一个无序 Array; 对这个 Array 进行升序排序,利用 isAse 判断排序后是否为升序。
代码如下:
from std import sort.*
from std import random.*
main(): Unit {
let r: Random = Random()
let arr: Array<Int64> = Array<Int64>(70000, { _ => r.nextInt64() })
arr.sortBy(stable: true){ rht: Int64, lht: Int64 =>
if (rht < lht) {
return Ordering.LT
}
if (rht > lht) {
return Ordering.GT
}
return Ordering.EQ
}
println(isAse(arr))
}
func isAse(t: Array<Int64>) {
var item: Int64 = t[0]
for (i in 1..t.size) {
if (item > t[i]) {
return false
}
item = t[i]
}
return true
}
运行结果如下:
true