最近在微信读书上翻到一本不错的算法书,叫算法图解,里面比较趣味性的讲解了计算成本,从二分查找开始,到选择排序、快速排序等等,书里面的算法实现都是通过python来实现的,因此,考虑用scala对相关算法进行实现,在了解算法的同时能够练练自己的代码能力,话不多说,直接上代码:
选择排序的最基础原理就是从一个数组中先找出一个最大(或者最小)的数字,放入到新数组的第一位,再从剩下的数组中找出最大的数字,再依次填入,从算法原理的角度看,这种排序是一种比较耗时的排序算法,其运行时间为O(n^2)。
首先定义一个找出一个数组中最小数字的方法:
import scala.collection.mutable.{ArrayBuffer,Buffer}
def findSmallest(array:Buffer[Int]):Int = {
var smallest = array(0)
var smallest_index = 0
for (i <- 1 to array.length-1) {
if (array(i) < smallest) {
smallest = array(i)
smallest_index = i
}
}
smallest_index
}
其中方法的取值取Buffer,主要为了便于后面进行删除取值操作方便。
排序方法:
def selectionSort(array:Array[Int]):Array[Int] = {
val newArray = array.toBuffer[Int]
val targetArray = ArrayBuffer[Int]()
for (i<- 0 to array.length-1) {
val smallest = findSmallest(newArray)
targetArray += newArray.remove(smallest)
}
targetArray.toArray
}
最终实现:
val array = Array(3,4,6,5,1,2)
selectionSort(array)
//res25: Array[Int] = Array(1, 2, 3, 4, 5, 6)