यदि पूर्णांक 0 से n तक सीमित हैं, तो आप सरणी के माध्यम से स्थानांतरित कर सकते हैं, संख्याओं को उनके सूचकांक द्वारा रख सकते हैं। प्रत्येक बार जब आप किसी नंबर को प्रतिस्थापित करते हैं, तो वह मान लें जो वहां होता था और इसे स्थानांतरित करने के लिए कहां जाना चाहिए। उदाहरण के लिए, मान लीजिए कि हम आकार 8 की एक सरणी डालते हैं:
-----------------
|3|6|3|4|5|1|7|7|
-----------------
S
कहाँ एस हमारे प्रारंभिक बिंदु है, और हम सी का उपयोग अपने "वर्तमान" नीचे सूचकांक का ट्रैक रखने के। हम इंडेक्स 0 के साथ शुरू करते हैं, और 3 इंडेक्स स्पॉट पर 3 ले जाते हैं, जहां 4 है। एक temp var में 4 सहेजें।
-----------------
|X|6|3|3|5|1|7|7| Saved 4
-----------------
S C
हम तो सूचकांक 4 में 4 शब्दों में कहें, बचत वहाँ क्या हुआ करता था, 5.
-----------------
|X|6|3|3|4|1|7|7| Saved 5
-----------------
S C
-----------------
|X|6|3|3|4|5|7|7| Saved 1
-----------------
S C
-----------------
|X|1|3|3|4|5|7|7| Saved 6
-----------------
S C
-----------------
|X|1|3|3|4|5|6|7| Saved 7
-----------------
S C
जारी रखें जब हम 7 को बदलने के लिए प्रयास करते हैं, हम देखते हैं एक संघर्ष, तो हम बस इसे जगह नहीं है। हम तो शुरू सूचकांक S से जारी रखने के लिए, 1 से यह भी वृद्धि:
-----------------
|X|1|3|3|4|5|6|7|
-----------------
S
1 यहाँ ठीक है, 3 की जरूरत है स्थानांतरित करने के लिए
-----------------
|X|1|X|3|4|5|6|7|
-----------------
S
लेकिन 3 डुप्लिकेट है, तो हम इसे फेंक और रख बाकी सरणी के माध्यम से पुनरावृत्ति।
तो मूल रूप से, हम प्रत्येक प्रविष्टि को अधिकतम 1 बार स्थानांतरित करते हैं, और पूरे सरणी के माध्यम से फिर से चलाते हैं। वह ओ (2 एन) = ओ (एन)
भाषा? ....... –
मुझे पूरा यकीन नहीं है कि आप ईमानदार होने के लिए ऐसा कर सकते हैं। मेरा मतलब है कि गिनती की तरह है, लेकिन इसके लिए अतिरिक्त जगह की आवश्यकता है। – zellio
मैं मिमिस्ब्रुनर के साथ हूं - मुझे यकीन नहीं है कि यह किया जा सकता है।गूगलिंग का सुझाव है कि एक हैशपैप (जिसे शायद यहां अनुमति नहीं है) का उपयोग करना इसे करने का सबसे तेज़, आसान तरीका है; यदि एक चालाक, रैखिक-समय एल्गोरिदम था जिसे अतिरिक्त स्मृति की आवश्यकता नहीं थी तो इसे ढूंढना आसान होगा। –