haskell排序的操作
来源:互联网 发布:淘宝店铺资金保护中 编辑:程序博客网 时间:2024/05/17 06:46
注意处理相同的元素
1快排
qsort []=[]
qsort (h:t)=(qsort(filter (<h) t) )++(num (h:t)) ++(qsort(filter (>h) t))
num (h:t)=filter (==h) (h:t)
2冒泡
(1)
bubble_once [] = []
bubble_once [x] = [x]
bubble_once (x : y : zs) | x < y = y : bubble_once (x : zs)
| otherwise = x : bubble_once (y : zs)
bubble_sort [] = []
bubble_sort list = x : bubble_sort xs
where (x : xs) = (reverse . bubble_once) list
(2)不reverse的例子,不过,++ 和init的操作效率不高,估计和你的差不多:
bb [] =[]
bb [x] = [x]
bb (x:y:xs) | x > y = y: bb (x:xs)
| otherwise = x: bb (y:xs)
bubsort [] = []
bubsort xs = let z = bb xs in bubsort (init z) ++ [last z]
(3)选择排序
import Data.List
select_sort ::Ord a => [a]->[a]
select_sort [] = []
select_sort l =
let
m = maximum l
num = elemIndexNum m l
list0 = numElemList num m
in
list0 ++ select_sort (filter (<m) l)
--列表中某特定元素的个数
elemIndexNum ::Ord a => a ->[a]->Int
elemIndexNum x xs= length $ elemIndices x xs
--相当于python中的[x]*num
numElemList ::Ord a => Int->a ->[a]
numElemList 0 x=[]
numElemList num x= x : numElemList (num-1) x
主要转载自:水木 :http://www.newsmth.net/nForum/#!article/FuncProgram/24436?p=1
- haskell排序的操作
- haskell的世界观(1)
- haskell的世界观(2)
- haskell的世界观(3)
- haskell的世界观(4)
- haskell的类型转换
- 关于haskell的讨论
- Haskell的缩进
- haskell的世界观(1)
- haskell的世界观(2)
- haskell的世界观(3)
- haskell的世界观(4)
- 神奇的Haskell
- Haskell 的范畴
- Haskell的list
- Haskell的WriterMonad解构
- Haskell的newtype研究
- Haskell
- Win7下Vmware8装Mac Lion 7经历
- tomcat 大并发报错 Maximum number of threads (200) created for connector with address null and port 8080
- 笔记整理:关于C和C++的编译、连接过程
- 限免费插件开发游戏 Make A 2D Game in Unity3D Using Only Free Tools Part 1
- 腾讯实习生笔试题
- haskell排序的操作
- Qt字符串转换和处理
- 源码编译-app
- 再谈javascript图片预加载技术
- redhat5.4里安装Qt4.4.3经验
- 学Hibernate报:Exception in thread "main" org.hibernate.LazyInitializationException: could not initiali
- Android自定义字体方法
- 急诊室二三事
- Android 关于录音文件的编解码 实现米聊 微信一类的录音上传的功能