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,排序后 t1t2 后;如果 comparator 的返回值为 Ordering.LT,排序后 t1t2 前;如果 comparator 的返回值为 Ordering.EQ,且为稳定排序那么 t1t2 的位置较排序前保持不变; 如果 comparator 的返回值为 Ordering.EQ,且为不稳定排序,那么 t1t2 顺序不确定

extend Array <: SortExtension

extend Array<T> <: SortExtension where T <: Comparable<T>

此扩展用于实现 Arraysort/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,排序后 t1t2 后;如果 comparator 的返回值为 Ordering.LT,排序后 t1t2 前;如果 comparator 的返回值为 Ordering.EQ,排序后 t1t2 顺序不确定

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,排序后 t1t2 后;如果 comparator 的返回值为 Ordering.LT,排序后 t1t2 前;如果 comparator 的返回值为 Ordering.EQ,排序后 t1t2 的位置较排序前保持不变

示例

对 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