scala实现冒泡排序和选择排序
class sort{
def BubbleSort(arr: Array[Int]): Unit = {
for (i <- 0 until arr.length-1) //总共运行n-1趟
{
for (j <- 0 until arr.length-1-i) //一趟的比较次数,每轮减少一次
{
if(arr(j+1)<arr(j))
{
var temp = 0
temp = arr(j+1)
arr(j+1) = arr(j)
arr(j) = temp
}
}
}
for (m <- 0 until arr.length)
printf("%d ",arr(m))
}
def ChooseSort(arr: Array[Int]): Unit = {
for (i <- 0 until arr.length-1){ //0-8
var index = 0 //保存最小值的下标
var temp = 0 //交换的中间变量
for (j <- i to arr.length-1){ //i-9
var current = arr(i)
if (arr(j) <= current) //比较找到最小值的下标
{
index = j
current = arr(j)
}
}
temp = arr(index)
arr(index) = arr(i)
arr(i) = temp
}
for (m <- 0 until arr.length)
printf("%d ",arr(m))
}
}
object sort{
def main(args: Array[String]): Unit = {
val sort1 = new sort
val arr = Array(11,2,4,5,99,22,16,11,60,24)
sort1.BubbleSort(arr)
println()
sort1.ChooseSort(arr)
}
}
有一个问题出现在选择排序的if判断里。index每次会被初始化为0,那么在最后一轮剩下60,99。这个时候因为cur=60,arr(j)因为等于60,会跳过if语句,直接执行后面的交换语句。但是index是0,所以会把60换到第一个位置,因此将<改为<=
实现scala编程这本书上的一个案例,在第四章结尾
import scala.io.Source
class sort {
def width_Of_Length(s: String): Int = s.length.toString.length //求传入字符串长度的位数:例如string的长度是6,长度位数是1
def MaxString(L: List[String]): Int = { //求最长字符串的下标
var index = 0
var Curlength=0
for (i <- 0 until L.length)
{
if(L(i).length>Curlength)
{
index = i
Curlength = L(i).length
}
}
return index
}
}
object sort {
def main(args: Array[String]): Unit = {
val wl = new sort
val filename = "XXX//XXX//hello.scala"
val lines = Source.fromFile(filename).getLines().toList
val longString_index = wl.MaxString(lines) //最长字符串的下标
val maxwidth = wl.width_Of_Length(lines(longString_index)) //求最长字符串长度的位数
for (line <- lines) {
val numSpace = maxwidth - wl.width_Of_Length(line)
val padding = " " * numSpace
println(padding + line.length + " | " + line)
}
}
}
文中的文件名改成你自个儿的就行。
这几天看完了scala的基础语法,上面的内容都是自己手写完成来熟悉scala,后面实现了快速排序我再补充上来。等后面几天看完函数式编程这部分,再来精简这里的代码。同时也要抓紧时间准备我的毕业答辩了,10号上午答辩,虽然我的毕设很简陋,但是还是要把做了的部分好好讲出来。奥里给加油