Please note, this is a STATIC archive of website www.tutorialspoint.com from 11 May 2019, cach3.com does not collect or store any user information, there is no "phishing" involved.
Tutorialspoint

1 Answer
George John

Shell Sort allows the exchange of items that are far apart in the array and then reduces the gap between them. This is a sort of generalization of Insertion Sort. Shell Sort is known as such as it was published by Donald Shell at first.

A program that demonstrates shell sort in C# is given as follows −

Example

Live Demo

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] + " ");
         }
      }
   }
}

The output of the above program is as follows.

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

Now let us understand the above program.

In the main() function, first the initial array is displayed. Then, the function shellSort() is called to perform shell sort on the array. The code snippet for this is given as follows −

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); 

In the function shellSort(), the given array is sorted using a while loop and a for loop. The gap used for shell sort is 3. he code snippet for this is given as follows.

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;
   }
}

Advertisements

We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy.