基数排序

 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         }

 

posted @ 2012-12-27 17:54  宁静.致远  阅读(182)  评论(0编辑  收藏  举报