2009-10-27 14 views
5

क्या मानक गारंटी है कि बराबर तत्वों का क्रम नहीं बदलेगा (एह, उस शब्द को भूल गया है) std :: sort का उपयोग करके या क्या मुझे इस लक्ष्य को प्राप्त करने के लिए वैकल्पिक समाधान पर विचार करने की आवश्यकता है?क्या std :: sort बराबर तत्वों के सापेक्ष क्रम को बदलता है?

+5

स्थिर_सॉर्ट के अस्तित्व को देखते हुए, मुझे लगता है कि "नहीं" –

उत्तर

18

std::sort स्थिर होने की गारंटी नहीं है (शब्द के बारे में सोच की कोशिश कर रहे थे)। जैसा कि आप अनुमान लगाएंगे, std::stable_sort स्थिर होने की गारंटी है। std::stable_sort भी सबसे बुरी स्थिति जटिलता पर गारंटी प्रदान करता है, जो std::sort नहीं है। std::sort हालांकि औसत पर आमतौर पर तेज़ है।

+0

ध्यान दें कि औसत मामले में std :: sort तेज है, हालांकि । – tgamblin

+0

+! धन्यवाद ... इस्तेमाल किया गया स्थिर प्रकार – vehomzzz

+0

@ जेरी इस विकी को इस उत्तर में जोड़ें (इसलिए उचित): http://stackoverflow.com/questions/1596139/hidden-features-and-dark-corners-of-stl – vehomzzz

2

नहीं, अगर आप गारंटी उपयोग std :: stable_sort

2

नहीं चाहते यह स्पष्ट रूप से इस बात की गारंटी नहीं देता है। यदि आपको इसके बजाय सापेक्ष ऑर्डरिंग स्थिर_सॉर्ट का उपयोग करने की आवश्यकता है। जो तुम क्या वर्णन कर रहे हैं के लिए बराबर तत्वों

2

अवधि के संदर्भ में भी शामिल है एक तरह से

प्रलेखन stability है।

SGI की STL docs से:

नोट: sort स्थिर होने की गारंटी नहीं है।

यदि आपको इसकी आवश्यकता है तो stable_sort का उपयोग करें।

3

सी ++ संदर्भ से: here

तत्वों है कि एक दूसरे के बराबर की तुलना हैं उनके मूल रिश्तेदार आदेश रखने के लिए गारंटी नहीं है।

आप stable_sort चाहते हो सकता है, लेकिन ध्यान दें कि यह जितनी जल्दी नहीं है (औसत में)

+0

सही है, भ्रम से बचने के लिए 'औसत' कीवर्ड को बेहतर तरीके से जोड़ें। –

+0

मेरे लिए अच्छा लग रहा है। –

+0

जिस टिप्पणी ने इसे इंगित किया है, शायद इसे हटा दिया गया है, इस प्रकार मैं अपना खुद का लंबित होने देता हूं, क्योंकि मैं वास्तव में इसे हटा नहीं सकता क्योंकि यह तुम्हारा होगा ... ओह ठीक है :) –

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