शेल सॉर्ट सरणी में दूर स्थित वस्तुओं के आदान-प्रदान की अनुमति देता है और फिर उनके बीच के अंतर को कम करता है। यह एक तरह से इंसर्शन सॉर्ट का सामान्यीकरण है। शेल सॉर्ट को इस नाम से जाना जाता है क्योंकि इसे सबसे पहले डोनाल्ड शेल द्वारा प्रकाशित किया गया था।
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("शेल सॉर्ट");
Console.Write("प्रारंभिक सरणी है: ");
for (i = 0; i < n; i++) {
Console.Write(arr[i] + " ");
}
shellSort(arr, n);
Console.Write("\nक्रमबद्ध सरणी है: ");
for (i = 0; i < n; i++) {
Console.Write(arr[i] + " ");
}
}
}
}
आउटपुट
उपरोक्त प्रोग्राम का आउटपुट निम्नलिखित है।
शेल सॉर्ट प्रारंभिक सरणी है: 56 12 99 32 1 95 25 5 100 84 क्रमबद्ध सरणी है: 1 5 12 25 32 56 84 95 99 100
अब आइए उपरोक्त प्रोग्राम को समझते हैं।
Main() फ़ंक्शन में, पहले प्रारंभिक सरणी प्रदर्शित की जाती है। फिर, सरणी पर शेल सॉर्ट करने के लिए shellSort() फ़ंक्शन को कॉल किया जाता है। इसके लिए कोड स्निपेट निम्नलिखित है -
int[] arr = new int[] { 56, 12, 99, 32, 1, 95, 25, 5, 100, 84 };
int n = arr.Length;
int i;
Console.WriteLine("शेल सॉर्ट");
Console.Write("प्रारंभिक सरणी है: ");
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;
}
}