2010-02-23 14 views
10

मैं परीक्षा किताब के अनुसार MCTS 70-536 परीक्षा के लिए तैयारी व्यस्त हूँ, (माइक्रोसॉफ्ट प्रेस - .नेट फ्रेमवर्क - अनुप्रयोग विकास फाउंडेशन स्व प्रशिक्षण समयावधि किट 2 संस्करण), इस कोड का नमूना:ArrayList BinarySearch

ArrayList al = new ArrayList(); 
al.AddRange(new string[] { "Hello", "world", "this", "is", "a", "test" }); 
Console.WriteLine(al.BinarySearch("this")); 

कंसोल के लिए मूल्य '2' आउटपुट करता है क्योंकि आइटम 'यह' इंडेक्स 2 पर है। सहमत है कि जब मैं कोड चलाता हूं तो आउटपुट मिलता है।

लेकिन अगर मैं चलाने

Console.WriteLine(al.BinarySearch("world")); 

मैं पाने के लिए 'दुनिया' के बाद से कंसोल में मान 1 इंडेक्स को 1 पर होगा उम्मीद करेंगे, हालांकि मैं मूल्य -7 मिल सकता है?

क्या कोई यह बता सकता है कि यह कैसे काम करता है?

धन्यवाद

उत्तर

11

सरणी आप पर पृथक नहीं किया जा रहा है द्विआधारी खोज प्रदर्शन कर रहे हैं। यह कार्य करने के लिए BinarySearch के लिए एक आवश्यकता है।

सॉर्ट नहीं किया जा रहा है, खोज एल्गोरिदम को भ्रमित करता है, और यह सोचता है कि "दुनिया" 7 वें स्थान पर होना चाहिए, लेकिन यह सरणी में नहीं है: परिणाम -7 है।

+0

धन्यवाद, मुझे बेहतर परिणाम दिए गए हैं। मैं पुस्तक में त्रुटि से काफी हैरान हूं। यह थोड़ा अजीब लग रहा था। बाइनरी सर्च और एक IndexOf (ओं) विधि एक ही काम कर रही है। –

3

ArrayList.BinarySearch की MSDN प्रलेखीकरण (http://msdn.microsoft.com/en-us/library/5tzt7yz3%28VS.85%29.aspx)

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

0

documentation से:

अनुसार क्रमबद्ध ArrayList, यदि मान पाया जाता है में मूल्य के शून्य आधारित सूचकांक; अन्यथा, एक नकारात्मक संख्या है, जो अगर कोई बड़ा तत्व, गणना की बिटवाइज़ पूरक है अगले तत्व से बड़ा मूल्य है कि के सूचकांक की बिटवाइज़ पूरक या,।

पर ध्यान दें शब्द सॉर्ट करें।

1

प्रश्न पहले ही उत्तर दिया गया है लेकिन संदर्भ के लिए इसे जोड़ा गया है।

द्विआधारी खोज एक क्रमबद्ध एल्गोरिदम का उपयोग करके आइटम पायेगी। आप उदाहरण में डिफ़ॉल्ट प्रकार वर्णमाला है इसलिए "दुनिया" अंतिम होना चाहिए, इसलिए संख्या 7.

आप बाइनरीशर्च का ओवरलोडर देखेंगे जो आईसीओएमपेयर ऑब्जेक्ट स्वीकार करता है। आपूर्ति करने के लिए यह वर्णमाला के डिफ़ॉल्ट प्रकार देता है।

लेकिन यदि आपने पुस्तक को सुझाव दिया है तो "रिवर्सोर्ट" विधि लागू की गई है तो आपको बाइनरीशर्च फ़ंक्शन को "रिवर्सोर्ट" ऑब्जेक्ट को पास करने की आवश्यकता होगी।

इस तरह;

Console.WriteLine(al.BinarySearch(al, new reverseSort())); 

इसके अलावा, मैं यह काफी दिलचस्प यदि आप "reverseSort" वर्ग को लागू करने और एक Console.WriteLine मान जो इस आधार पर तुलना करने के लिए, परिणाम है कि मैं क्या उम्मीद थी नहीं कर रहे थे कर पाया बस के रूप में। मैंने एल्गोरिदम क्या काम करने की कोशिश करते समय थोड़ी देर बिताई।