2009-12-26 16 views
18

यदि मेरे पास दो सरणी हैं, x और y जहां y x में प्रत्येक तत्व के दसियों का मान है। अब, मैं वाई को सॉर्ट करना चाहता हूं। लेकिन, वाई का क्रम एक्स के अलग होगा। इसलिए, मैं सॉर्ट करने के बाद नहीं बता सकता कि वाई में कौन सा तत्व संबंधित था, उदाहरण के लिए, x [0]। मुझे एक "डबल सॉर्टिंग" होना चाहिए। आपकी मदद असीम रूप से सराहना की है!किसी अन्य सरणी से संबंधित सरणी को सॉर्ट करना

+0

कौन-सी भाषा के बारे में हम बात कर रहे हैं? क्या कोई प्रदर्शन बाधाएं हैं? –

+0

सी #, कोई बाधा –

उत्तर

48

Array.Sort में an overload है जो दो सरणी स्वीकार करता है; चाबियों के लिए एक, और वस्तुओं के लिए एक। दोनों के आइटम keys सरणी के अनुसार हल कर रहे हैं:

int[] keys = { 1, 4, 3, 2, 5 }; 
string[] items = { "abc", "def", "ghi", "jkl", "mno" }; 
Array.Sort(keys, items); 
foreach (int key in keys) { 
    Console.WriteLine(key); // 1, 2, 3, 4, 5 
} 
foreach (string item in items) { 
    Console.WriteLine(item); // abc, jkl, ghi, def, mno 
} 
अपने मामले में

तो, यह लग रहा है कि आप की तरह हैं:

Array.Sort(y,x); // or Sort(x,y); - it isn't 100% clear 
+5

+1, इस छोटे मणि 'Array.Sort (x, y) 'के बारे में कभी नहीं सुना। –

+0

धन्यवाद। वास्तव में मदद की। –

+0

मेरे दिमाग को उड़ाएं ... बहुत उपयोगी। धन्यवाद! – Totero

1

यदि y हमेशा x का दस मान है, तो संभवतः अस्तित्व में नहीं होना चाहिए - आपको संभवतया केवल आवश्यकतानुसार एक्स के मूल्य की गणना करनी चाहिए।

सामान्य रूप से, समानांतर सरणी को सॉर्ट करना केवल संभव है (बिना किसी प्रकार के एल्गोरिदम को घुमाए) जब सॉर्ट एल्गोरिदम एक कस्टम "स्वैप" फ़ंक्शन लेता है, जिसे आप दोनों सरणी में एक साथ तत्वों को स्वैप करने के संदर्भ में कार्यान्वित कर सकते हैं। std :: सी ++ में क्रमबद्ध करें और सी में qsort इस की अनुमति न दें।

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

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