home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / progmisc / euphor10.zip / SHELL.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-01  |  2KB  |  79 lines

  1. program main(input, output);
  2. { Shell Sort Benchmark }
  3. const
  4.     ITERATIONS = 20000;
  5.     NITEMS = 50;
  6. var
  7.     list: array[1..NITEMS] of integer;
  8.     x: array[1..NITEMS] of integer;
  9.  
  10.     i, j, t: integer;
  11.  
  12. procedure shell_sort;
  13. { Shell sort based on insertion sort }
  14. var
  15.     i, gap, j, n: integer; 
  16.     tempi, tempj: integer;
  17.     stop, stop2: boolean;
  18.  
  19. begin
  20.     gap := NITEMS div 4 + 1;
  21.     stop := false;
  22.     while not stop do
  23.     begin
  24.     for i := gap + 1 to NITEMS do
  25.     begin
  26.         tempi := x[i];
  27.         j := i - gap; 
  28.         stop2 := false;
  29.         while not stop2 do
  30.         begin
  31.         tempj := x[j];
  32.         if tempi >= tempj then
  33.         begin
  34.             j := j + gap;
  35.             stop2 := true;
  36.         end
  37.         else
  38.         begin
  39.             x[j+gap] := tempj;
  40.             if j <= gap then 
  41.                 stop2 := true
  42.             else
  43.                 j := j - gap;
  44.         end;
  45.         end;
  46.         x[j] := tempi;
  47.     end;
  48.     if gap = 1 then 
  49.         stop := true
  50.     else
  51.         gap := gap div 4 + 1; 
  52.     end;
  53. end;
  54.  
  55. begin
  56.     list[1] := 9;   list[2] := 34;  list[3] := 14;  list[4] := 18; 
  57.     list[5] := 33;  list[6] := 46;  list[7] := 11;  list[8] := 13; 
  58.     list[9] := 7;   list[10] := 26; list[11] := 22; list[12] := 10; 
  59.     list[13] := 36; list[14] := 40; list[15] := 2;  list[16] := 28; 
  60.     list[17] := 32; list[18] := 1;  list[19] := 23; list[20] := 31; 
  61.     list[21] := 43; list[22] := 5;  list[23] := 24; list[24] := 42; 
  62.     list[25] := 45; list[26] := 50; list[27] := 16; list[28] := 3; 
  63.     list[29] := 47; list[30] := 39; list[31] := 21; list[32] := 49; 
  64.     list[33] := 41; list[34] := 6;  list[35] := 19; list[36] := 30; 
  65.     list[37] := 20; list[38] := 35; list[39] := 44; list[40] := 38; 
  66.     list[41] := 25; list[42] := 15; list[43] := 27; list[44] := 17; 
  67.     list[45] := 8;  list[46] := 4;  list[47] := 29; list[48] := 37; 
  68.     list[49] := 48; list[50] := 12; 
  69.     for i := 1 to ITERATIONS do 
  70.     begin
  71.         for j := 1 to NITEMS do
  72.            x[j] := list[j];
  73.         shell_sort;
  74.     end;
  75.     for i := 1 to NITEMS do
  76.     write(x[i]);
  77. end.
  78.  
  79.