scala的三個排序方法

2021-10-10 16:48:06 字數 4779 閱讀 9925

def sorted[b >

: a]

(implicit ord: ordering[b]

): repr

scala>

val a = list(10,

5,8,

1,7)

.sorted

a: list[

int]

= list(1,

5,7,

8,10)

scala>

val b = list(

"banana"

,"pear",,

"orange"

).sorted

b: list[

string

]

自定義型別的排序

如果序列持有的型別沒有隱式型別,則無法用 對它進行排序

其中emplist.sorted.foreach(println)等價於

emplist.

sorted

(ordering[emp]).

foreach

(println

)

利用隱式引數完成排序

val firstemp: emp = emp(1,

"michael"

,1000.00

)val secondemp: emp = emp(2,

"james"

,12000.00

)val thirdemp = emp(3,

"shaun"

,9000.00

)val emplist = list(firstemp, secondemp, thirdemp)

//傳參的時候不需要傳入隱式引數

emplist.sorted.foreach(println)

}case

class emp(id:

int, name:

string

, salary:

double

)object emp }}

隱式引數可以不用傳遞,系統會自動尋找

object _02****** 

}case

class emp(id:

int, name:

string

, salary:

double

)extends ordered[emp]

要傳入乙個比較函式,且該函式的返回值為布林型別

def sortwith

(lt:

(a, a)

=> boolean)

: repr

scala>

val list=list(

"a",

"d",

"f",

"b",

"e")

list: list[

string

]= list(a, d, f, b, e)

scala> list.sortwith(

(x,y)

=>x.tolowercaseres0: list[

string

]= list(a, b, d, e, f)

scala>  list(

"steve"

,"tom"

,"john"

,"bob"

).sortwith(_.compareto(_)

<0)

res1: list[

string

]= list(bob, john, steve, tom)

自定義類的排序

比較簡單,不用定義隱式什麼的

object _02****** 

).foreach(println)}}

case

class emp(id:

int, name:

string

, salary:

double

)

依據隱式的排序方法進行排序

def sortby[b]

(f: a =

> b)

(implicit ord: ordering[b]

): repr

一維排序例子

scala>

val words =

"the quick brown fox jumped over the lazy dog"

.split(

' ')

words: array[

string

]= array(the, quick, brown, fox, jumped, over, the,

lazy

, dog)

//依據字串長度進行排序

scala> words.sortby(x=>x.length)

res0: array[

string

]= array(the, fox, the, dog, over,

lazy

, quick, brown, jumped)

//先依據字串長度,再依據首字母排序

scala> words.sortby(x=>x.length,x.head)

:26: error: too many arguments for method sortby:

(f:string

=> b)

(implicit ord: scala.math.ordering[b]

)array[

string

] words.sortby(x=>x.length,x.head)

^scala> words.sortby(x=>

(x.length,x.head)

)res2: array[

string

]= array(the, dog, fox, the,

lazy

, over, brown, quick, jumped)

//依據字典排序

scala> words.sortby(x=>x)

res3: array[

string

]= array(the, brown, dog, fox, jumped,

lazy

, over, quick, the)

二維排序例子

scala>

val a = list(

("a",2

),("b",44

),("c",20

),("a",20

),("a",1

))a: list[

(string

,int)]

= list(

(a,2),

(b,44),

(c,20),

(a,20),

(a,1))

//依據數字進行排序

scala> a.sortby(x=>x._2)

res8: list[

(string

,int)]

= list(

(a,1),

(a,2),

(c,20),

(a,20),

(b,44))

//先依據字母排序,字母相同的依據數字排序

scala> a.sortby(x=>

(x._1,x._2)

)res9: list[

(string

,int)]

= list(

(a,1),

(a,2),

(a,20),

(b,44),

(c,20))

scala> a.sortby(x=>x._1)

res10: list[

(string

,int)]

= list(

(a,2),

(a,20),

(a,1),

(b,44),

(c,20))

//先依據數字排序,數字相同的依據字母排序

scala> a.sortby(x=>

(x._2,x._1)

)res11: list[

(string

,int)]

= list(

(a,1),

(a,2),

(a,20),

(c,20),

(b,44

))

sortby原始碼底層呼叫了sorted

def sortby[b]

(f: a => b)

(implicit ord: ordering[b]

): repr = sorted(ord on f)

自定義類的排序

object _02****** 

}case

class emp(id:

int, name:

string

, salary:

double

)

Scala 三個引號

雙引號 1.換行需要加 n 比如 val s select from user n where user id 100 println s 控制台輸出結果 select from user where user id 100 三引號1 中間字串可以直接回車換行val s select from us...

三個簡單的排序

氣泡排序 從第乙個元素開始,和它右邊的哪個元素比較,如果它比右邊的哪個元素大的話,就交換位置,經過第一次後,最右邊的那個元素,就是最大的哪個元素.第二次同樣,從第一元素開始,但是比較到倒數第二個元素,這樣右邊第二個元素就是第二高的元素.依次這樣下去,每次比較的結束值就是,比上一次小乙個,直到結束的標...

O n 的三個排序演算法

今天覆習下最簡單的三個排序演算法,乙個是選擇排序,乙個是插入排序,乙個是氣泡排序,三者時間複雜度都是o n 通過分析來發現三者的優劣,以及對最好的情況和最壞的情況進行分析。另外,這三中排序演算法都是基於比較的排序演算法。基於比較的排序演算法的執行過程,會涉及兩種操作,一種是元素比較大小,另一種是元素...