基数排序
1 /// <summary> 2 /// 基数排序 3 /// 原理:首先按个位数进行排序,再以十位数排序 4 /// LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。 5 /// </summary> 6 /// <param name="v"></param> 7 /// <returns></returns> 8 public static int[] RadixSort(int[] v) 9 { 10 int[] temp = new int[10]; 11 for (int i = 0; i < v.Length; i++) 12 { 13 int k = v[i] % 10; 14 temp[k] = v[i]; 15 } 16 17 v = getV(temp, v); 18 19 for (int n = 0; n < v.Length; n++) 20 { 21 int m = v[n] / 10; 22 if (m == 0) 23 m = v[n] % 10; 24 temp[m] = v[n]; 25 } 26 27 v = getV(temp, v); 28 29 return v; 30 } 31 32 /// <summary> 33 /// 得到新数组 34 /// </summary> 35 /// <param name="temp"></param> 36 /// <param name="v"></param> 37 /// <returns></returns> 38 public static int[] getV(int[] temp, int[] v) 39 { 40 int i = 0; 41 for (int j = 0; j < temp.Length; j++) 42 { 43 if (temp[j] > 0) 44 { 45 v[i] = temp[j]; 46 temp[j] = 0; 47 i++; 48 } 49 } 50 51 return v; 52 }
工欲善其事,必先利其器。