Scala数组排序的快速实现

开发 后端
本文介绍了Scala数组排序的快速实现。对数字数组快速排序的sort(Array[Int])方法展示了Scala语法的简明特征:复杂度没有改变,而代码大大简化了。

真的是越来越喜欢Scala了,简洁的语法,清新的风格是我对Scala的印象,感觉使用Scala进行编程真的非常的方便,从Scala的设计思想也能得到不少的启发,就比如下面的一个对数字数组快速排序的sort(Array[Int])方法,你以前想到过通过这样的方式实现吗?

51CTO编辑推荐:Scala编程语言专题

Scala数组排序实现代码

  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("排序前的结果");  
  10.     arrays.foreach((array: Int ) => println(array))  
  11.     arrays = sort(arrays);  
  12.     Console.println("排序后的结果");  
  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数组排序快速实现代码点评

sort(Array[Int])方法通过简明的方式完成了传统的快速排序功能:

1、判断参数数组是否为空?如果为空说明排序完成,直接方法参数。

2、如果给定的参数数字不为空,取得数组的中间数。

3、根据中间数对参数数组进行拆分,通过调用Array的filter(p: A => Boolean)方法对数组进行分区并生成一个新的数组,"xs filter (pivot >)" 生成一个新的数组只包含小于pivot的数字,"xs filter (pivot ==)"里面的数组只包含等于pivot的数组,"xs filter (pivot < )"则包含大于pivot的数字,通过sort方法的迭代,完成了排序过程。

4、通过Array.concat方法合并多个数组,返回排序后的结果就行了。

sort方法指定了返回值但是方法块中没有"return" 语言,其实加不加都无所谓,Scala编译器可以自动进行判断。

Scala数组排序的优点

这种方式和传统的快速排序方法在时间复杂度和空间复杂度相似,但是代码却大大的简化了,不信你用Java写一个对数字数组快速的排序方法(要自己写,使用Collections.sort(List< T>)方法可不算啊)。

Scala引起了大家的大量关注,一些人拿Scala的缺点和Java的优点进行比较进行批评Scala,"另一些人拿Java缺点和Scala优点进行比较来拥护Scala,然后两队人在论坛上打起了口水仗,Scala又不是钞票,当然不能够取悦所有人。

本文来自vwpolo的博客《Scala 的快速排序》一文。

【相关阅读】

  1. Scala Actor:多线程的基础学习
  2. Scala入门介绍:Hello World
  3. Scala初学者学习资料:main(String[])
  4. 影响Scala语言设计的因素列表
  5. 喜欢Scala编程的四个理由
责任编辑:yangsai 来源: vwpolo的博客
相关推荐

2011-05-25 11:25:23

快速排序Javascript

2009-11-20 09:24:10

PHP多维数组排序

2009-11-16 16:17:45

PHP数组排序

2021-03-04 07:24:28

排序算法优化

2009-10-19 11:26:08

Scala循环数组

2009-11-30 18:59:52

PHP数组排序

2023-05-08 07:55:05

快速排序Go 语言

2009-11-24 10:31:22

PHP函数sort()

2009-08-28 11:03:21

C#快速排序

2010-10-08 13:21:03

JavaScript多维数组

2022-03-07 09:42:21

Go快速排序

2009-07-09 00:25:00

Scala参数化

2011-04-20 15:20:03

快速排序

2009-11-25 14:44:34

PHP函数array_

2009-10-10 09:27:42

Java泛型通用方法

2017-04-06 14:10:08

JavaScript数组排序

2009-07-22 09:43:30

Scala类型

2014-10-30 15:08:21

快速排序编程算法

2009-11-17 16:09:04

PHP二维数组排序

2020-02-21 08:18:58

JavaScala编程语言
点赞
收藏

51CTO技术栈公众号