बस मस्ती के लिए मैं Linq के साथ सी # में एक quicksort कार्यान्वयन बनाया:Linq साथ quicksort प्रदर्शन लाभ गुजर टी [] बनाम IEnumerable <T>
public static IEnumerable<T> quicksort<T>(IEnumerable<T> input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksort(input.Skip(1).Where(i => i.CompareTo(pivot) <= 0));
var greater = quicksort(input.Where(i => i.CompareTo(pivot) > 0));
return lesser.Append(pivot).Concat(greater);
}
यह बारे में 13 सेकंड में 10000 यादृच्छिक पूर्णांकों क्रमबद्ध करता है।
लगभग 700 गुना बेहतर प्रदर्शन में सूची परिणामों के बजाय int [] का उपयोग करने के लिए इसे बदल रहा है! यह केवल 10000 यादृच्छिक पूर्णांक को क्रमबद्ध करने के लिए 21ms लेता है।
public static T[] quicksortArray<T>(T[] input) where T : IComparable<T>{
if (input.Count() <= 1) return input;
var pivot = input.FirstOrDefault();
var lesser = quicksortArray(input.Skip(1).Where(i => i.CompareTo(pivot) <= 0).ToArray());
var greater = quicksortArray(input.Where(i => i.CompareTo(pivot) > 0).ToArray());
return lesser.Append(pivot).Concat(greater).ToArray();
}
बस कोड मैं इस मान लिया है | बदतर प्रदर्शन करना होगा पर देख रहे हैं। मैंने माना कि .ToArray() स्मृति में एक अतिरिक्त सरणी बनाएगा और वहां सभी पूर्णांक कॉपी करेगा। मुझे लगता है कि एक सूची बनाकर एक सरणी बनाम पास करना एक ही समय लेना चाहिए।
तो यह विशाल प्रदर्शन अंतर कहां से आता है?
https://ideone.com/E5ASv7, https://ideone.com/DAUfmB – Ryan
'quicksortArray' से' ऐरे की तुलना करने के बाद आप थोड़ा आश्चर्यचकित हो सकते हैं।सॉर्ट करें ' – Slai
@ स्लाई मुझे पता है कि यह कुशल नहीं है और इसका उपयोग किसी भी चीज़ के लिए नहीं करेगा :-) – marv51