package com.sort import scala.collection.mutable.ArrayBuffer import scala.util.control.Breaks._ /** * 简单排序 */ object TestSort { def main(args: Array[String]): Unit = { val arr = ArrayBuffer[Int](11, 2, 31, 7, 99, 0) //val res = BubbleSort(arr) //val res = SelectSort(arr) val res = InsertSort(arr) for (i <- res) { print(i + "\t") } } //冒泡排序 def BubbleSort(arr: ArrayBuffer[Int]): ArrayBuffer[Int] = { //这里用了scala中的breakable类来帮助跳出循环 for (i <- 0 until arr.length - 1) { var flag = true breakable { for (j <- 0 until arr.length - 1 - i) { if (arr(j) > arr(j + 1)) { val temp = arr(j) arr(j) = arr(j + 1) arr(j + 1) = temp flag = false } } } if (flag) break() } arr } //插入排序 def SelectSort(arr: ArrayBuffer[Int]): ArrayBuffer[Int] = { //找到每一次最小的数,如果有更小的就交换 for (i <- 0 until arr.length - 1) { var index = i var min = arr(i) for (j <- i + 1 until arr.length) { if (min > arr(j)) { index = j min = arr(j) } } if (index != i) { arr(index) = arr(i) arr(i) = min } } arr } def InsertSort(arr: ArrayBuffer[Int]): ArrayBuffer[Int] = { for (i <- 1 until arr.length) { //scala中 表示for(int i = 10;i>0;i--)这样的形式一般使用Range方法,最后一个参数为步长,默认为 1 for (j <- Range(i, 0, -1)) { //如果后面的比前面的小就插进去 if (arr(j) < arr(j - 1)) { val temp = arr(j) arr(j) = arr(j - 1) arr(j - 1) = temp } } } arr } }