2018-01-27 posted in [Scala]
import Array._
// val与var初始化的区别:val是value不可修改,var是variable
// 访问时使用小括号()而不是中括号[]
val ori = Array(1,6,8,5,3,2,4,9,0,7)
// Array可以先声明长度再修改
val ori_example:Array[Int] = new Array[Int](2)
// ori_example(0) = 1
// ori_example(1) = 2
// "Unit" 表示没有返回值
// 所有参数本身都不可以修改,数组对应的内容可以修改
def swap( arr:Array[Int], a:Int, b:Int ): Unit = {
val tmp = arr(a); arr(a) = arr(b); arr(b) = tmp
}
// isInstanceOf后用的是中括号
def prints(arr:Any): Unit = {
if( arr.isInstanceOf[Array[Int]] ){
val tmp = arr.asInstanceOf[Array[Int]]
tmp.foreach( a => print( a + " " ) )
println()
}
// // isInstanceOf判断类型时,回去掉参数,无法区分List[Int]和List[String]
// else if( arr.isInstanceOf[List] ){
// val tmp = arr.asInstanceOf[List[Int]]
// tmp.foreach( a => print( a + " " ) )
// println()
// }
}
def printa(arr1:Array[Int]): Unit = {
arr1.foreach( a => print( a + " " ) )
println()
}
def printl(arr1:List[Int]): Unit = {
arr1.foreach( a => print( a + " " ) )
println()
}
// 冒泡排序
def bubbleSort(arr:Array[Int]): Unit = {
var pos = arr.length - 1
while( pos != 0 ){
val bound = pos;
pos = 0;
for( i <- 0 until bound ){
if( arr(i) > arr(i+1) ){
swap( arr, i, i + 1 )
pos = i;
}
}
}
}
val ori_1 = ori.clone
printa(ori_1)
println("bubbleSort")
bubbleSort(ori_1)
printa(ori_1)
// 递归快排
// :: 表示当个元素加到List头部或者尾部,++表示连接
// head 只取第一个,tail 取第二个开始的全部
def quickSort(arr:List[Int]): List[Int] = {
if (arr.isEmpty) arr
else {
val p = arr.head
val (left, right) = arr.tail.partition(_ < p)
quickSort(left) ++ (p :: quickSort(right))
}
}
val ori_2 = ori.toList
println("QuickSort")
val ori_3 = quickSort(ori_2)
printl(ori_3)
// 函数式风格的快排
// Array 拼接需要import Array._
def quickSort_fun(arr:Array[Int]): Array[Int] = {
if (arr.length <= 1) arr
else {
val pivot = arr(arr.length / 2)
concat(quickSort_fun(arr filter(pivot > _)),
(arr filter(pivot == _)),
quickSort_fun(arr filter(pivot < _)))
}
}
val ori_4 = ori.clone
println("QuickSort functional")
val ori_5 = quickSort_fun(ori_4)
printa(ori_5)
// 函数式风格的快排
def quickSort_fun_l(arr:List[Int]): List[Int] = {
if (arr.length <= 1) arr
else {
val pivot = arr(arr.length / 2)
quickSort_fun_l(arr filter(pivot > _)) ++
(arr filter(pivot == _)) ++
quickSort_fun_l(arr filter(pivot < _))
}
}
val ori_6 = ori.toList
println("QuickSort functional")
val ori_7 = quickSort_fun_l(ori_6)
printl(ori_7)