शेल सॉर्ट उन वस्तुओं के आदान-प्रदान की अनुमति देता है जो सरणी में बहुत दूर हैं और फिर उनके बीच के अंतर को कम करते हैं। यह इंसर्शन सॉर्ट का एक प्रकार का सामान्यीकरण है। शेल सॉर्ट को वैसे ही जाना जाता है जैसे इसे सबसे पहले डोनाल्ड शेल द्वारा प्रकाशित किया गया था।
एक प्रोग्राम जो C# में शेल सॉर्ट प्रदर्शित करता है, वह इस प्रकार दिया गया है -
उदाहरण
using System; namespace ShellSortDemo { public class Example { static void shellSort(int[] arr, int n) { int i, j, pos, temp; pos = 3; while (pos > 0) { for (i = 0; i < n; i++) { j = i; temp = arr[i]; while ((j >= pos) && (arr[j - pos] > temp)) { arr[j] = arr[j - pos]; j = j - pos; } arr[j] = temp; } if (pos / 2 != 0) pos = pos / 2; else if (pos == 1) pos = 0; else pos = 1; } } static void Main(string[] args) { int[] arr = new int[] { 56, 12, 99, 32, 1, 95, 25, 5, 100, 84 }; int n = arr.Length; int i; Console.WriteLine("Shell Sort"); Console.Write("Initial array is: "); for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } shellSort(arr, n); Console.Write("\nSorted Array is: "); for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } } } }
आउटपुट
उपरोक्त कार्यक्रम का आउटपुट इस प्रकार है।
Shell Sort Initial array is: 56 12 99 32 1 95 25 5 100 84 Sorted Array is: 1 5 12 25 32 56 84 95 99 100
आइए अब उपरोक्त कार्यक्रम को समझते हैं।
मुख्य () फ़ंक्शन में, पहले प्रारंभिक सरणी प्रदर्शित होती है। फिर, फ़ंक्शन shellSort () को सरणी पर शेल सॉर्ट करने के लिए कहा जाता है। इसके लिए कोड स्निपेट इस प्रकार दिया गया है -
int[] arr = new int[] { 56, 12, 99, 32, 1, 95, 25, 5, 100, 84 }; int n = arr.Length; int i; Console.WriteLine("Shell Sort"); Console.Write("Initial array is: "); for (i = 0; i < n; i++) { Console.Write(arr[i] + " "); } shellSort(arr, n);
फ़ंक्शन shellSort () में, दिए गए सरणी को थोड़ी देर के लूप और लूप के लिए सॉर्ट किया जाता है। शेल सॉर्ट के लिए इस्तेमाल किया गया गैप 3 है। इसके लिए वह कोड स्निपेट इस प्रकार दिया गया है।
static void shellSort(int[] arr, int n) { int i, j, pos, temp; pos = 3; while (pos > 0) { for (i = 0; i < n; i++) { j = i; temp = arr[i]; while ((j >= pos) && (arr[j - pos] > temp)) { arr[j] = arr[j - pos]; j = j - pos; } arr[j] = temp; } if (pos / 2 != 0) pos = pos / 2; else if (pos == 1) pos = 0; else pos = 1; } }