基数排序

 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         }

 

你可能感兴趣的:(基数排序)