Skip to content

Instantly share code, notes, and snippets.

@songpp
Created April 2, 2011 08:00
Show Gist options
  • Save songpp/899322 to your computer and use it in GitHub Desktop.
Save songpp/899322 to your computer and use it in GitHub Desktop.
scala 快速排序
package flower.april.sort
import flower.april.util.ArrayUtils
/**
* Date: 2010-7-26
* Time: 12:34:40
* Description:
*/
object QuickSort {
def sort[T <% Ordered[T]](arr: Array[T], start: Int = 0, end: Int) {
def partition(from: Int = 0, to: Int): Int = {
val x = arr(to)
var i = from - 1
for (j <- from until to) {
if (arr(j) <= x) {
i = i + 1
ArrayUtils.swap(arr, i, j)
}
}
ArrayUtils.swap(arr, i + 1, to)
return i + 1
}
if (start < end) {
val m = partition(start, end)
sort(arr, start, m - 1)
sort(arr, m + 1, end)
}
}
def main(arg: Array[String]): Unit = {
Console println "QuickSort"
val arr = Array(87,2, 4, 5, 89, 6, 7, 8)
sort(arr, end = arr.length - 1)
arr.foreach(println)
}
}
@h63542
Copy link

h63542 commented Jul 31, 2011

too much java style! it‘s not scala style

@h63542
Copy link

h63542 commented Jul 31, 2011

def msort[T](less:%28T,T%29 => Boolean)(xs:List[T]):List[T] = {
def merge(xs:List[T],ys:List[T]):List[T] = (xs,ys) match{
case (Nil,) => ys
case (
,Nil) => xs
case (x::xs1,y::ys1) =>
if (less(x,y))x::merge (xs1,ys)
else y::merge (xs,ys1)
}
val n = xs.length / 2
if (n==0) xs
else{
val (ys,zs) = xs splitAt n
merge(msort(less)(ys),msort(less)(zs))
}
}

@songpp
Copy link
Author

songpp commented Jul 31, 2011 via email

@songpp
Copy link
Author

songpp commented Jul 31, 2011 via email

@h63542
Copy link

h63542 commented Aug 5, 2011

def quicksort[T](less:%28T,T%29 => Boolean)(xs:List[T]):List[T] = {
list match {
case Nil => Nil
case x::xs =>
val (before,after) = xs partition(less(_ ,x))
qsort(before) ++ (x :: qsort(after))
}
}

@h63542
Copy link

h63542 commented Aug 5, 2011

def quicksort[T](less:%28T,T%29 => Boolean)(xs:List[T]):List[T] = {
xs match {
case Nil => Nil
case x::xs =>
val (before,after) = xs partition(less(_ ,x))
quicksort(less)(before) ++ (x :: quicksort(less)(after))
}
}

@songpp
Copy link
Author

songpp commented Aug 16, 2011 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment