选择排序的scala实现

最近在微信读书上翻到一本不错的算法书,叫算法图解,里面比较趣味性的讲解了计算成本,从二分查找开始,到选择排序、快速排序等等,书里面的算法实现都是通过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)

猜你喜欢

转载自blog.csdn.net/lorrylee1346/article/details/84437212
今日推荐