मैं सी # में एक quicksort एल्गोरिदम लागू करने में कुछ समय बिताता हूं। परिष्करण के बाद मैंने अपने कार्यान्वयन की गति और सी # के ऐरे सॉर्ट-विधि की तुलना की।सबसे तेज़ सुरक्षित सॉर्टिंग एल्गोरिदम कार्यान्वयन
मैं बस यादृच्छिक int arrays पर काम करने की गति की तुलना करता हूं।
यहाँ मेरी कार्यान्वयन है:
static void QuickSort(int[] data, int left, int right)
{
int i = left - 1,
j = right;
while (true)
{
int d = data[left];
do i++; while (data[i] < d);
do j--; while (data[j] > d);
if (i < j)
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
else
{
if (left < j) QuickSort(data, left, j);
if (++j < right) QuickSort(data, j, right);
return;
}
}
}
प्रदर्शन (जब एक यादृच्छिक पूर्णांक छँटाई [] 100000000 की लंबाई के साथ):
- मेरे एल्गोरिथ्म: 14.21 सेकंड
- नेट सरणी <int> .Sort: 14.84 सेकंड
क्या कोई जानता है कि मेरा एक तरीका कैसे कार्यान्वित किया जाए लिगोरिदम भी तेज?
या कोई भी तेजी से कार्यान्वयन प्रदान कर सकता है (एक quicksort नहीं होना चाहिए!) जो मेरे रन तेजी से?
नोट:
- कोई एल्गोरिदम, जो कई कोर का उपयोग/प्रोसेसर सुधार करने के लिए कृपया perrformance
- वैध सी # स्रोत कोड
मैं एक के भीतर प्रदान एल्गोरिदम के प्रदर्शन का परीक्षण होगा अगर मैं ऑनलाइन हूं तो कुछ मिनट।
संपादित करें:
क्या आपको लगता है कि 8 से कम मूल्य वाले भागों के लिए आदर्श सॉर्टिंग नेटवर्क का उपयोग प्रदर्शन में सुधार होगा?
अपने समय को दोहराने का प्रयास करें जब एक सरणी जो पहले से क्रमबद्ध है ... फिर एक सरणी के साथ जिसमें गलत क्रम में केवल दो आइटम हैं .. –
4.3% का प्रदर्शन लाभ - क्या आप अकादमिक कारणों से ऐसा कर रहे हैं? – flq
इयान पहले से क्रमबद्ध सरणी के बारे में सही है। पिवोट तत्व की आपकी पसंद में सबसे खराब-केस प्रदर्शन होने वाला है। ऐसा कहकर, क्विक्सोर्ट को तेज करना काफी सरल है। MedianOfThree विधि जैसे कुछ का उपयोग करके एक बेहतर पिवट का चयन करें और छोटे विभाजन के लिए एक अधिक उपयुक्त सॉर्टिंग एल्गोरिदम का उपयोग करें। मुझे लगता है कि आप व्यक्तिगत शोध के लिए ऐसा कर रहे हैं क्योंकि सिस्टम-लाइब्रेरी सॉर्ट विधि का उपयोग लगभग हमेशा सही जवाब है। – Blastfurnace