zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    jQuery
    前端开发之JavaScript篇
    前端开发之css篇
    前端开发之html篇
    mysql续
    MySQL入门
    进程线程协程那些事儿
    Python之socket网络编程
    2016.6.24——vector<vector<int>>【Binary Tree Level Order Traversal】
    2016.6.21——Climbing Stairs
  • 原文地址:https://www.cnblogs.com/catkins/p/5270683.html
Copyright © 2011-2022 走看看