交换*号到第一位的partition算法和不改变数字位置的算法 scala版本

来源:互联网 发布:mac 查杀进程 编辑:程序博客网 时间:2024/06/05 11:54

下面算法想法来自七月算法上的视频:http://www.julyedu.com/video/play/id/28

交换*号到第一位的partition算法:

case class SortNum[T](str: String) {//因为字符串在scala里面是常量,一旦改变会生成一个新的字符串而不是在原本上更新,所以需要构建一个映射的数组var strArray = str.toBuffer//交换函数def swap(num1: Int, num2: Int){val temp = str(num1)strArray(num1) = strArray(num2)strArray(num2) = temp}//初始化参数val n = str.lengthvar j = 0var i = 0//循环def sort:String = {for (j <- 0 until n) {if (str(j).toString == "*") {swap(i, j)i += 1}}strArray.mkString}}object SortNum {
implicit def strs[T](str: String):SortNum[T] = SortNum(str)                                                  //> strs: [T](str: String)SortNum[T]val abc = "*12*23*34"                     //> abc  : String = *12*23*34abc.sort                                  //> res0: String = ***123234}

不改变数字位置的算法:

case class SortNum[T](str: String) {//因为字符串在scala里面是常量,一旦改变会生成一个新的字符串而不是在原本上更新,所以需要构建一个映射的数组var strArray = str.toBuffer//使用填充的方法def fill(i: Int, x: Int) {strArray(i) = str(x)}//初始化参数val n = str.lengthvar i = 0var j = n -1//从尾部开始扫描,扫描到非*的填充到尾部,扫描到*号填充到开头def sort:String = {for (x <- (0 until n) reverse) {if (str(x).toString != "*") {fill(j,x)j = j-1} else {fill(i,x)i +=1}}strArray.mkString}}object SortNum {implicit def strs[T](str: String):SortNum[T] = SortNum(str)                                                  //> strs: [T](str: String)SortNum[T]val abc = "*12*23*34"                     //> abc  : String = *12*23*34abc.sort                                  //> res0: String = ***122334}


 

0 0
原创粉丝点击