Shell Sort(草稿)

  1 using System;

  2 using System.Collections.Generic;

  3 using System.Linq;

  4 using System.Text;

  5 

  6 namespace ShellSort

  7 {

  8     class DataType

  9     {

 10         public double Data;

 11 

 12         public static bool operator <(DataType a, DataType b)

 13         {

 14             if (a.Data < b.Data)

 15                 return true;

 16 

 17             return false;

 18         }

 19 

 20         public static bool operator >(DataType a, DataType b)

 21         {

 22             if (a.Data > b.Data)

 23                 return true;

 24 

 25             return false;

 26         }

 27 

 28         public DataType()

 29         {

 30             Data = 0;

 31         }

 32     }

 33     class Program

 34     {

 35         public static int count = 0;

 36         static void Main(string[] args)

 37         {

 38             DataType[] array = CreateArray(10);

 39             SetArrayValue(array);

 40             ShellSort(array, 0, array.Length - 1);

 41 

 42             Console.ReadKey();

 43         }

 44 

 45         public static void ShellSort(DataType[] array, int left, int right)

 46         {

 47             DataType temp;

 48             int i, j, gap = right - left + 1;

 49             PrintArray(array);

 50             do

 51             {

 52                 gap = gap / 3 + 1;

 53                 for (i = left + gap; i <= right; i++)

 54                 {

 55                     if (array[i] < array[i - gap])

 56                     {

 57                         temp = array[i];

 58                         j = i - gap;

 59                         do

 60                         {

 61                             array[j + gap] = array[j];

 62                             j = j - gap;

 63                         } while (j > left && temp < array[j]);

 64                         array[j + gap] = temp;

 65                     }

 66                 }

 67                 count++;

 68                 Console.WriteLine("间隔为: {0}", gap);

 69                 PrintArray(array);

 70             } while (gap > 1);

 71         }

 72 

 73         public static void PrintArray(DataType[] array)

 74         {

 75             Console.Write("第{0}次排序结果: ", count);

 76             foreach (var data in array)

 77             {

 78                 if (data != array[array.Length - 1])

 79                 {

 80                     Console.Write(data.Data + " ");

 81                 }

 82                 else

 83                 {

 84                     Console.WriteLine(data.Data);

 85                 }

 86             }

 87         }

 88 

 89         public static void SetArrayValue(DataType[] array)

 90         {

 91             Random random = new Random();

 92             foreach (var data in array)

 93             {

 94                 data.Data = random.Next(0, 20);

 95             }

 96         }

 97 

 98         public static DataType[] CreateArray(int size)

 99         {

100             if (size < 1)

101                 return null;

102             DataType[] temp = new DataType[size];

103             for (int i = 0; i < size; i++)

104             {

105                 temp[i] = new DataType();

106             }

107             return temp;

108         }

109     }

110 }
Code Here

 

你可能感兴趣的:(shell)