haskell排序的操作
2012-12-04 14:28
106 查看
注意处理相同的元素
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
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排序的操作
- 深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则
- c语言心得-----数组中对元素的操作排序,查找,插入,和删除
- girdview 增添删改,list数据源排序,分页等操作,代码。
- SQL排序规则:无法解决 equal to 操作的排序规则冲突
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- python列表操作,排序
- 最大堆的插入/删除/调整/排序操作(图解+程序)(JAVA)
- 无法解决 equal to 操作中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_BIN" 之间的排序规则冲
- Java表格仿mysql实现基本操作(连接,分组排序,统计等)
- 综合——用Angular和js实现排序查询操作
- List采用delegate快速实现排序、查找等操作
- Effective STL iterm31:理解你的排序操作
- 添加,删除。排序。传值。编辑对话框,操作对话框。
- Linq对DataTable或者集合的排序,Where筛选,分组,统计总数sum等操作
- 查询正在做的排序操作
- 【原创】StreamInsight查询系列(九)——基本查询操作之决胜排序
- 【Educational Codeforces Round 3 C】【贪心 排序】Load Balancing 最小操作步数使得数字之差尽可能小
- js实现表格操作-排序
- STL算法库-排序和相关操作(一)