cangjie仓颉程序设计-怎么排序(二)
文章目录
- 数组排序
- 自定义排序
- 二维数组排序实例
本专栏还在持续更新: Cangjie仓颉程序设计-个人总结
这是双子专栏: 仓颉编程cangjie刷题录
数组排序
使用官方库 std.sort.*
该包中包含三种接口排序方式:
- 升序排序:sort()
- 降序排序:sortDescending()
- 自定义排序:sortBy()
该包中包含两种函数排序方式, 默认从小到大排序:
- 稳定排序:stableSort()
- 不稳定排序:unstableSort()
import std.sort.*
main() {var arr = [3, 4, 9, 8, 2, 1]arr.sort()arr.sortDescending()stableSort(arr)unstableSort(arr)
}
自定义排序
自定义排序写法,使用sortBy接口。同样可以指定稳定或者不稳定。
书写格式如下,以从小到大排序为例:
import std.sort.*
main () {var arr = [3, 4, 9, 8, 2, 1]arr.sortBy() {a:Int, b:Int =>if (a < b) {return Ordering.LT} else if (a > b) {return Ordering.GT}return Ordering.EQ}
}
二维数组排序实例
import std.sort.*
import std.random.*main() {var buildings:Array<Array<Int>> = [[5,12,12],[15,20,10],[19,24,8],[2,9,10],[3,7,15]]buildings.sortBy(stable: true){ rht: Array<Int>, lft: Array<Int> =>var x = rht.sizefor (i in 0..x) {if (rht[i] < lft[i]) {return Ordering.LT} else if (rht[i] == lft[i]) {continue} else {return Ordering.GT}}return Ordering.EQ}for (arr in buildings) {for (x in arr) {print(x)print(' ')}println()}
}
结果
2 9 10
3 7 15
5 12 12
15 20 10
19 24 8