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 }