scala实现 快速排序 和 插入排序

本文详细探讨了如何使用Scala编程语言实现两种经典排序算法:快速排序和插入排序。通过示例代码和解释,帮助读者理解这两种排序算法的工作原理及其在Scala中的应用。
摘要由CSDN通过智能技术生成

**插入排序

**在这里插入代码片

   // scal 函数式编程实现插入排序
    def insertSortByFunction[A <% Ordered[A]](list:List[A]):List[A]={
        def insertSort(unSort:List[A], sort:List[A]):List[A]=unSort match{
            case head::tail =>insertSort(tail,insert(head,sort))
            case Nil => sort

        }

        def insert(a: A, sort: List[A]):List[A]=sort match{
            case head :: tail if(a>head) => head :: insert(a,tail)
            case _ =>  a::sort
        }

        insertSort(list,Nil)
	}


//java 思想编程
def insertSort(arr:Array[Int]): Unit ={
    for(i <- 1 to arr.length -1){   //[1,arr.length-1]
        breakable{
            for(j <- 1 to i reverse){   //[1,i]    until[1,i)
                if(arr(j)<arr(j-1)){
                  arr(j)=arr(j-1)^arr(j)
                  arr(j-1)=arr(j-1)^arr(j)
                  arr(j)=arr(j-1)^arr(j)
                } else{
                  break
                }
              println(arr.mkString(" "))
            }
        }
    }
}

快排

在这里插入代码片
```//  函数式编程
// 利用  partition  实现 快排 
  def quickSortByPartition(list:List[Int]): List[Int] ={
    list match {
      case Nil => Nil
      case List() => List()
      case head :: tail =>
        val (left, right) = tail.partition(_ < head)  //  tail.partition( x => )
        quickSortByPartition(left) ::: head :: quickSortByPartition(right)
    }


  }
//  利用 filter 实现 快排
 def quickSortByFilter(a:List[Int]):List[Int]={
    if (a.length < 2) a
    else quickSortByFilter(a.filter(_ < a.head)) ++
      a.filter(_ == a.head) ++
      quickSortByFilter(a.filter(_ > a.head))
  }


//  java  思想编程
    def quickSort(arr:Array[Int],left:Int,right:Int): Unit ={
        if(left<right){
            val index = getIndex(arr:Array[Int],left:Int,right:Int)
            quickSort(arr,left,index-1)
            quickSort(arr,index+1,right)
        }
    }

    def getIndex(arr:Array[Int],x:Int,y:Int):Int = {
        var left = x
        var right= y
        val key = arr(left)
        while(left<right){
            while(arr(right)>key&&left<right){
                 right-=1
            }
          arr(left)=arr(right)
          while(arr(left)<key&&left<right){
              left+=1
          }
          arr(right)=arr(left)
        }
        arr(left)=key
        left
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值