Quiz Comment Box

sort

Shell Sort

Shell sortShell sort is a generalized version of the insertion sort algorithm. It first sorts elements that are far apart from each other and successively reduces the interval between the elements to be sorted.

Example :

Algorithm - Shell sort

                       
 Algorithm Shellsort [A (0..n-1)]
 
    // Sort a given array by Shell sort.
    // Input : An array A(0�n-1) of orderable elements.
    // Output : Array A [0�n-1] sorted in non- decreasing order .
    
 shellSort(array, size)
  for interval i <- size/2n down to 1
    for each interval "i" in array
        sort all the elements at interval "i"
end shellSort

                                                     
                             
                

Following are the implementation of Shell sort into programs

                        
#include < stdio.h >
#include < stdbool.h >
#define MAX 7
int intArray[MAX] = {4,6,3,2,1,9,7};
void printline(int count) {
   int i
   for(i = 0;i < count-1;i++) {
      printf("=");
   }	
   printf("=\n");
}
void display() {
   int i;
   printf("[");	
   // navigate through all items 
   for(i = 0;i < MAX;i++) {
      printf("%d ",intArray[i]);
   }	
   printf("]\n");
}
void shellSort() {
   int inner, outer;
   int valueToInsert;
   int interval = 1;   
   int elements = MAX;
   int i = 0;
   while(interval <= elements/3) {
      interval = interval*3 +1;
   }
    while(interval > 0) {
      printf("iteration %d#:",i); 
      display();      
      for(outer = interval; outer < elements; outer++) {
         valueToInsert = intArray[outer];
         inner = outer;			
         while(inner > interval -1 && intArray[inner - interval] 
            >= valueToInsert) {
            intArray[inner] = intArray[inner - interval];
            inner -=interval;
            printf(" item moved :%d\n",intArray[inner]);
         }  
         intArray[inner] = valueToInsert;
         printf(" item inserted :%d, at position :%d\n",valueToInsert,inner);
      }		
      interval = (interval -1) /3;
      i++;
   }          
}
int main() {
   printf("Input Array: ");
   display();
   printline(50);
   shellSort();
   printf("Output Array: ");
   display();
   printline(50);
   return 1;
}


       
                        
                         Code 
                    
                        
public class Demo {
   int shell_sort(int my_arr[]) {
      int arr_len = my_arr.length;
      for (int gap = arr_len / 2; gap > 0; gap /= 2) {
         for (int i = gap; i < arr_len; i += 1) {
            int temp = my_arr[i];
            int j;
            for (j = i; j >= gap && my_arr[j - gap] > temp; j -= gap)
            my_arr[j] = my_arr[j - gap];
            my_arr[j] = temp;
         }
      }
      return 0;
   }
   public static void main(String args[]) {
      int my_arr[] = { 12, 34, 54, 2, 3 };
      Demo my_instance = new Demo();
      my_instance.shell_sort(my_arr);
      System.out.println("The array, after performing shell sort is : ");
      int arr_len = my_arr.length;
      for (int i = 0; i < arr_len; ++i)
      System.out.print(my_arr[i] + " ");
      System.out.println();
   }
}



    
                        
                         Code 
                    
                        
def shell_sort(my_list, list_len):
   interval = list_len // 2
   while interval > 0:
      for i in range(interval, list_len):
         temp = my_list[i]
         j = i
         while j >= interval and my_list[j - interval] > temp:
            my_list[j] = my_list[j - interval]
            j -= interval
         my_list[j] = temp
      interval //= 2

my_list = [ 45, 31, 62, 12, 89, 5, 9, 8]
list_len = len(my_list)
print ("The list before sorting is :")
print(my_list)
shell_sort(my_list, list_len)
print ("\nThe list after performing shell sorting is :")
print(my_list)

                         Code 
                    

Sample Output

Before sorting array

45 31 62 12 89 5 9 8

Sorted array is

5 8 9 12 31 45 62 89

Time Complexity

Visualized

Note: For better Visualized Understanding visit our algorithm Visualizer

Visualize
Previous

Selection Sort