2008-11-10 18 views
8

बुलबुला-छँटाई एफ # में की सबसे खूबसूरत तरीका क्या है?बुलबुला-छँटाई एफ # में की सबसे खूबसूरत तरीका क्या है?

अद्यतन

के रूप में जवाब में से एक में बताया, बुलबुला छंटाई के साथ शुरू करने के लिए एक कार्यात्मक भाषा में कुशल नहीं है। एक humourously-निंदक टिप्पणीकार यह भी कहा कि बुलबुला छंटाई केवल उचित है जब सूची छोटा है और यह लगभग वैसे भी हल कर रहा है।

हालांकि, मैं यह देखने के लिए उत्सुक हूं कि एफ # में एक चालाक बबल-प्रकार कैसे लिखा जा सकता है, क्योंकि मैंने अतीत में सी #, सी ++ और जावा ईई में बबल प्रकार किए हैं, और चूंकि मैं एक एफ # नौसिखिया।

+2

हास्य के लिए +1 एक ही वाक्य –

+0

है कि मैं क्या सोचा में शब्द "सुंदर" और "बुलबुला-तरह" का प्रयोग करने में! – warren

+0

बुलबुला छंटाई कुशल है अगर सेट छोटा है, और लगभग क्रमबद्ध किया जाता है। – jonnii

उत्तर

10

एक कार्यात्मक भाषा में बुलबुला प्रकार का उपयोग कर कार्यान्वयन सूची में कई बार उल्टा करने के लिए नहीं है, क्योंकि (और यह वास्तव में अपरिवर्तनीय सूचियों के लिए बहुत कुशलता से लागू नहीं किया जा सकता है), बहुत ही कुशल नहीं है।

वैसे भी, Erlang से उदाहरण इस तरह एफ # करने के लिए फिर से लिखा जा सकता है:

let sort l = 
    let rec sortUtil acc rev l = 
    match l, rev with 
    | [], true -> acc |> List.rev 
    | [], false -> acc |> List.rev |> sortUtil [] true 
    | x::y::tl, _ when x > y -> sortUtil (y::acc) false (x::tl) 
    | hd::tl, _ -> sortUtil (hd::acc) rev tl 
    sortUtil [] true l 

दूसरी ओर, यदि आप एक ही एल्गोरिथ्म परिवर्तनशील सरणियों का उपयोग कर लागू कर सकते हैं। यह अधिक कुशल होगा और एफ # में यदि आप चाहें तो भी सरणी के साथ काम कर सकते हैं। निम्न फ़ंक्शन सरणी की एक प्रति बनाता है और इसे टाइप करता है।

let sort (arr:'a[]) = 
    let arr = arr |> Array.copy 
    let swap i j = let tmp = arr.[i] in arr.[i] <- arr.[j]; arr.[j] <- tmp 
    for i = arr.Length - 1 downto 0 do 
    for j = 1 to i do 
     if (arr.[j - 1] > arr.[j]) then swap (j-1) j 
    arr 

टॉमस

+0

"Erlang से उदाहरण" http://en.literateprograms.org/Special:Downloadcode/Bubble_sort_(Erlang <- अतः के एचटीएमएल टूट गया है, तो कृपया जोड़ने के एक बंद अपने आप को जाने वाले कोष्ठक। – sep332

संबंधित मुद्दे