用scala实现冒泡和选择排序

本文介绍了如何使用Scala编程语言实现冒泡排序和选择排序。在选择排序中,作者发现了一个问题,即在最后一轮排序时,由于index未正确更新,可能会导致错误的排序结果。修正方法是将条件判断从`<`改为`<=`。这是根据《实现scala编程》一书中第四章末尾的案例完成的,作者还计划在后续添加快速排序的实现,并在完成函数式编程的学习后优化代码,同时准备即将到来的毕业答辩。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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号上午答辩,虽然我的毕设很简陋,但是还是要把做了的部分好好讲出来。奥里给加油

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值