haskell排序的操作

注意处理相同的元素

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

转载于:https://www.cnblogs.com/catkins/archive/2012/12/04/5270683.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值