1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsolePractice 8 { 9 class CArray 10 { 11 private int[] arr; 12 //数组大小 13 private int upper; 14 //下标 15 private int numElements; 16 17 /// <summary> 18 /// 初始化数组参数 19 /// </summary> 20 /// <param name="size"></param> 21 public CArray(int size) 22 { 23 arr = new int[size]; 24 upper = size - 1; 25 numElements = 0; 26 } 27 28 /// <summary> 29 /// 插入方法 30 /// </summary> 31 /// <param name="item">存储的数</param> 32 public void Insert(int item) 33 { 34 arr[numElements] = item; 35 numElements++; 36 } 37 38 /// <summary> 39 /// 输出方法 40 /// </summary> 41 public void DisplayElements() 42 { 43 for (int i = 0; i <= upper; i++) 44 { 45 Console.Write(arr[i] + " "); 46 } 47 Console.WriteLine(); 48 } 49 50 /// <summary> 51 /// 清除数组 52 /// </summary> 53 public void Clear() 54 { 55 for (int i = 0; i <= upper; i++) 56 { 57 arr[i] = 0; 58 } 59 numElements = 0; 60 } 61 62 #region 快速排序算法 63 /// <summary> 64 /// 快速排序算法 65 /// </summary> 66 public void QSort() 67 { 68 RecQSort(0, numElements - 1); 69 } 70 71 public void RecQSort(int first, int last) 72 { 73 if ((last - first) <= 0) 74 return; 75 else 76 { 77 int part = this.Partition(first, last); 78 RecQSort(first, part - 1); 79 RecQSort(part + 1, last); 80 } 81 } 82 83 public int Partition(int first, int last) 84 { 85 int pivotVal = arr[first]; 86 int theFirst = first; 87 bool okSide; 88 first++; 89 do 90 { 91 okSide = true; 92 while (okSide) 93 { 94 if (arr[first] > pivotVal) 95 okSide = false; 96 else 97 { 98 first++; 99 okSide = (first <= last); 100 } 101 } 102 okSide = true; 103 while (okSide) 104 { 105 if (arr[last] <= pivotVal) 106 okSide = false; 107 else 108 { 109 last--; 110 okSide = (first <= last); 111 } 112 } 113 if (first < last) 114 { 115 Swap(first, last); 116 this.DisplayElements(); 117 first++; 118 last--; 119 } 120 121 } while (first <= last); 122 Swap(theFirst, last); 123 this.DisplayElements(); 124 return last; 125 } 126 127 public void Swap(int item1, int item2) 128 { 129 int temp = arr[item1]; 130 arr[item1] = arr[item2]; 131 arr[item2] = temp; 132 } 133 #endregion 134 } 135 136 class C_shape 137 { 138 static void Main() 139 { 140 CArray nums = new CArray(10); 141 Random rnd = new Random(100); 142 for (int i = 0; i < 10; i++) 143 { 144 nums.Insert(rnd.Next(0, 100)); 145 } 146 Console.WriteLine("Before sorting:"); 147 nums.DisplayElements(); 148 Console.WriteLine("During sorting:"); 149 nums.QSort(); 150 Console.WriteLine("After sorting:"); 151 nums.DisplayElements(); 152 Console.ReadKey(); 153 } 154 } 155 }