Shell Sort

From CodeCodex

C[edit]

How to shell sort using C Language

#include <string.h>
  #include <stdio.h>
  #include <stdlib.h>

  void shell(char *items, int count)
  {

    register int i, j, gap, k;
    char x, a[5];

    a[0]=9; a[1]=5; a[2]=3; a[3]=2; a[4]=1;

    for(k=0; k < 5; k++) {
      gap = a[k];
      for(i=gap; i < count; ++i) {
        x = items[i];
        for(j=i-gap; (x < items[j]) && (j >= 0); j=j-gap)
          items[j+gap] = items[j];
        items[j+gap] = x;
      }
    }
  }

  int main(void)
  {

    char s[255];

    printf("Enter a string:");
    gets(s);
    shell(s, strlen(s));
    printf("The sorted string is: %s.\n", s);

    return 0;
  }

Tcl[edit]

proc shellsort args {
 set key 0
 set increment 3
 foreach arg $args {
        set numbers($key) $arg
        incr key
 }
 set number [array size numbers]

 while {$increment > 0} {
      for {set i 0} {$i < $number} {incr i} {
         set j $i
         set temp $numbers($i)
         while {($j >=$increment) && ($numbers([expr $j-$increment]) > $temp)} {
               set numbers($j) $numbers([expr $j - $increment])
               set j [expr $j - $increment]
         }
         set numbers($j) $temp
      }

      if {[expr $increment/2] != 0} {
        set increment [expr $increment/2]
      } elseif {$increment == 1} {
        set increment 0
      } else {
        set increment 1
      }

 }
 for {set i 0} {$i < $number} {incr i} {lappend sort $numbers($i)}
 puts $sort 
}