यह एक वास्तविक उत्तर की तुलना में एक अतिरिक्त विश्लेषण है, लेकिन यह डेटा के प्रकार के आधार पर भिन्न होता है। सबसे पहले, एक बेस रीडिंग:
$ printf "%s\n" {1..1000000} > numbers.txt
$ time python sort.py <numbers.txt >s1.txt
real 0m0.521s
user 0m0.216s
sys 0m0.100s
$ time sort <numbers.txt >s2.txt
real 0m3.708s
user 0m4.908s
sys 0m0.156s
ठीक है, अजगर बहुत तेज है। हालाँकि, आप sort
संख्यात्मक रूप से क्रमबद्ध करने के लिए कहकर कोर्यूटिल्स को तेज़ कर सकते हैं :
$ time sort <numbers.txt >s2.txt
real 0m3.743s
user 0m4.964s
sys 0m0.148s
$ time sort -n <numbers.txt >s2.txt
real 0m0.733s
user 0m0.836s
sys 0m0.100s
यह बहुत तेज़ है लेकिन अजगर अभी भी एक व्यापक अंतर से जीतता है। अब, फिर से कोशिश करते हैं लेकिन 1M नंबरों की गैर-सॉर्ट की गई सूची के साथ:
$ sort -R numbers.txt > randomized.txt
$ time sort -n <randomized.txt >s2.txt
real 0m1.493s
user 0m1.920s
sys 0m0.116s
$ time python sort.py <randomized.txt >s1.txt
real 0m2.652s
user 0m1.988s
sys 0m0.064s
अनियोजित sort -n
संख्यात्मक डेटा के लिए कोर्यूटिल्स तेज़ है (हालांकि आप cmp
इसे तेजी से बनाने के लिए अजगर के प्रकार के पैरामीटर को ट्विक करने में सक्षम हो सकते हैं )। कोरुटिल्स sort
अभी भी -n
ध्वज के बिना काफी धीमा है । तो, यादृच्छिक वर्णों के बारे में क्या, शुद्ध संख्या नहीं?
$ tr -dc 'A-Za-z0-9' </dev/urandom | head -c1000000 |
sed 's/./&\n/g' > random.txt
$ time sort <random.txt >s2.txt
real 0m2.487s
user 0m3.480s
sys 0m0.128s
$ time python sort.py <random.txt >s2.txt
real 0m1.314s
user 0m0.744s
sys 0m0.068s
पायथन अभी भी कोरयूटिल्स को हराता है, लेकिन आपके प्रश्न में जो दिखाते हैं उससे बहुत कम अंतर से। हैरानी की बात है, शुद्ध वर्णमाला डेटा को देखते हुए यह अभी भी तेज है:
$ tr -dc 'A-Za-z' </dev/urandom | head -c1000000 |
sed 's/./&\n/g' > letters.txt
$ time sort <letters.txt >s2.txt
real 0m2.561s
user 0m3.684s
sys 0m0.100s
$ time python sort.py <letters.txt >s1.txt
real 0m1.297s
user 0m0.744s
sys 0m0.064s
यह भी ध्यान रखना महत्वपूर्ण है कि दोनों एक ही क्रमबद्ध आउटपुट का उत्पादन नहीं करते हैं:
$ echo -e "A\nB\na\nb\n-" | sort -n
-
a
A
b
B
$ echo -e "A\nB\na\nb\n-" | python sort.py
-
A
B
a
b
अजीब तरह से पर्याप्त, --buffer-size
विकल्प मेरे परीक्षणों में बहुत (या किसी भी) अंतर बनाने के लिए प्रतीत नहीं हुआ। अंत में, संभवत: गोल्डिलॉक के उत्तर में उल्लिखित विभिन्न एल्गोरिदम के कारण, अजगर sort
ज्यादातर मामलों में तेज प्रतीत होता है , लेकिन संख्यात्मक जीएनयू sort
इसे अनसोल्ड नंबर 1 पर धड़कता है ।
ओपी को शायद मूल कारण मिल गया है लेकिन पूर्णता के लिए, यहाँ एक अंतिम तुलना है:
$ time LC_ALL=C sort <letters.txt >s2.txt
real 0m0.280s
user 0m0.512s
sys 0m0.084s
$ time LC_ALL=C python sort.py <letters.txt >s2.txt
real 0m0.493s
user 0m0.448s
sys 0m0.044s
1 अधिक अजगर-फू के साथ किसी ने मुझे list.sort()
छँटाई का परीक्षण करने की कोशिश करनी चाहिए उसी गति को निर्दिष्ट करके छँटाई विधि को प्राप्त किया जा सकता है।