基本思路
将list分成做扫描以及右扫码两个部分,即leftList以及rightList,先对数组从左往右扫描,找到第一不大于当前定义的关键值数,与它进行交换。然后再从右往左进行扫描,找到第一个不小于当前关键值的数,将它们交换,然后将数据分成两个部分,前面一部分都小于关键字,后面一部分都大于关键字,然后再前后的部分继续进行前面描述的操作(递归的调用自己)。
代码
let rec quickSort (list : int list) =
match list with
| [] -> []
| [single] -> [single]
| head :: tail ->
let leftList =
tail
|> List.choose(fun item -> if item <= head then Some(item) else None)
let rightList =
tail
|> List.choose(fun item -> if item > head then Some(item) else None)
quickSort(leftList) @ [head] @ quickSort(rightList)
let data =[3;2;1;5]
let r= quickSort(data);;