自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Scala數(shù)組排序的快速實(shí)現(xiàn)

開(kāi)發(fā) 后端
本文介紹了Scala數(shù)組排序的快速實(shí)現(xiàn)。對(duì)數(shù)字?jǐn)?shù)組快速排序的sort(Array[Int])方法展示了Scala語(yǔ)法的簡(jiǎn)明特征:復(fù)雜度沒(méi)有改變,而代碼大大簡(jiǎn)化了。

真的是越來(lái)越喜歡Scala了,簡(jiǎn)潔的語(yǔ)法,清新的風(fēng)格是我對(duì)Scala的印象,感覺(jué)使用Scala進(jìn)行編程真的非常的方便,從Scala的設(shè)計(jì)思想也能得到不少的啟發(fā),就比如下面的一個(gè)對(duì)數(shù)字?jǐn)?shù)組快速排序的sort(Array[Int])方法,你以前想到過(guò)通過(guò)這樣的方式實(shí)現(xiàn)嗎?

51CTO編輯推薦:Scala編程語(yǔ)言專(zhuān)題

Scala數(shù)組排序?qū)崿F(xiàn)代碼

  1. /**  
  2.  * 快速排序的例子2  
  3.  * @author VWPOLO  
  4.  * < p>2009-8-12< /p>  
  5.  */ 
  6. object TestQuickSort2 {  
  7.   def main(args : Array[String]) : Unit = {  
  8.     var arrays = Array(123,343,5435,23,3213);  
  9.     Console.println("排序前的結(jié)果");  
  10.     arrays.foreach((array: Int ) => println(array))  
  11.     arrays = sort(arrays);  
  12.     Console.println("排序后的結(jié)果");  
  13.     arrays.foreach((array: Int ) => println(array))  
  14.   }  
  15.     
  16.   def sort(xs: Array[Int]):Array[Int] = {  
  17.     if(xs.length < = 1)  
  18.       xs;  
  19.     else {  
  20.       val pivot = xs(xs.length /2);  
  21.       Array.concat(  
  22.           sort(xs filter (pivot >)),  
  23.                xs filter (pivot ==),  
  24.           sort(xs filter (pivot < ))  
  25.       )  
  26.     }  
  27.   }  

Scala數(shù)組排序快速實(shí)現(xiàn)代碼點(diǎn)評(píng)

sort(Array[Int])方法通過(guò)簡(jiǎn)明的方式完成了傳統(tǒng)的快速排序功能:

1、判斷參數(shù)數(shù)組是否為空?如果為空說(shuō)明排序完成,直接方法參數(shù)。

2、如果給定的參數(shù)數(shù)字不為空,取得數(shù)組的中間數(shù)。

3、根據(jù)中間數(shù)對(duì)參數(shù)數(shù)組進(jìn)行拆分,通過(guò)調(diào)用Array的filter(p: A => Boolean)方法對(duì)數(shù)組進(jìn)行分區(qū)并生成一個(gè)新的數(shù)組,"xs filter (pivot >)" 生成一個(gè)新的數(shù)組只包含小于pivot的數(shù)字,"xs filter (pivot ==)"里面的數(shù)組只包含等于pivot的數(shù)組,"xs filter (pivot < )"則包含大于pivot的數(shù)字,通過(guò)sort方法的迭代,完成了排序過(guò)程。

4、通過(guò)Array.concat方法合并多個(gè)數(shù)組,返回排序后的結(jié)果就行了。

sort方法指定了返回值但是方法塊中沒(méi)有"return" 語(yǔ)言,其實(shí)加不加都無(wú)所謂,Scala編譯器可以自動(dòng)進(jìn)行判斷。

Scala數(shù)組排序的優(yōu)點(diǎn)

這種方式和傳統(tǒng)的快速排序方法在時(shí)間復(fù)雜度和空間復(fù)雜度相似,但是代碼卻大大的簡(jiǎn)化了,不信你用Java寫(xiě)一個(gè)對(duì)數(shù)字?jǐn)?shù)組快速的排序方法(要自己寫(xiě),使用Collections.sort(List< T>)方法可不算啊)。

Scala引起了大家的大量關(guān)注,一些人拿Scala優(yōu)點(diǎn)進(jìn)行比較來(lái)?yè)碜o(hù)Scala,然后兩隊(duì)人在論壇上打起了口水仗,Scala又不是鈔票,當(dāng)然不能夠取悅所有人。

本文來(lái)自vwpolo的博客《Scala 的快速排序》一文。

【相關(guān)閱讀】

  1. Scala Actor:多線(xiàn)程的基礎(chǔ)學(xué)習(xí)
  2. Scala入門(mén)介紹:Hello World
  3. Scala初學(xué)者學(xué)習(xí)資料:main(String[])
  4. 影響Scala語(yǔ)言設(shè)計(jì)的因素列表
  5. 喜歡Scala編程的四個(gè)理由
責(zé)任編輯:yangsai 來(lái)源: vwpolo的博客
相關(guān)推薦

2011-05-25 11:25:23

快速排序Javascript

2009-11-20 09:24:10

PHP多維數(shù)組排序

2009-11-16 16:17:45

PHP數(shù)組排序

2021-03-04 07:24:28

排序算法優(yōu)化

2009-10-19 11:26:08

Scala循環(huán)數(shù)組

2009-11-30 18:59:52

PHP數(shù)組排序

2023-05-08 07:55:05

快速排序Go 語(yǔ)言

2009-11-24 10:31:22

PHP函數(shù)sort()

2009-08-28 11:03:21

C#快速排序

2010-10-08 13:21:03

JavaScript多維數(shù)組

2022-03-07 09:42:21

Go快速排序

2009-07-09 00:25:00

Scala參數(shù)化

2011-04-20 15:20:03

快速排序

2009-07-22 09:43:30

Scala類(lèi)型

2014-10-30 15:08:21

快速排序編程算法

2020-02-21 08:18:58

JavaScala編程語(yǔ)言

2017-04-06 14:10:08

JavaScript數(shù)組排序

2009-10-10 09:27:42

Java泛型通用方法

2009-11-25 14:44:34

PHP函數(shù)array_

2012-05-14 13:58:19

Erlang
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)