和JAVA版的大斑竹吵架了,我代表C#版来拿排序算法第一行不?大家去支援我!~!
我代表C#版来拿第一行不?
http://topic.csdn.net/u/20080623/14/23ab6317-1179-4c24-bb41-39b2d00697d5.html?seed=1910952138
规则如下:  
1 数据量为10万(好的算法可以到100万),从小到大排序  
2 数据采用如下代码产生,保证测试数据的唯一性  
3 不限制内存的使用  
4 最后将在不同用户的同一台机器上进行多次测试,以运行时间为标准,越少越好。  
5 如果速度太快,就使用 System.nanoTime(); 进行判断或者加大数据量到100万,甚至1000万数量级进行判断。  
6 评委暂定为java版的几位小版主  
参加方法  
1 直接把代码回复在后面即可  
2 截至日期为本周5的晚上  
3 奖励前5名,第一名400技术专家分,第二名200技术专家分,3、4、5名每人100技术专家分。  
4 前2名,允许个人介绍,求职,个人作品宣传的帖子大版置顶3天。  
初始化代码如下。  
Java codeimport java.util.Random;
class T {
   public static void main(String[] args) {
     int MAX = 100000;
     int[] nums = new int[MAX];
     Random r = new Random(20080623);
     for (int i = 0; i < MAX; i++) {
       nums[i] = r.nextInt(MAX);
     }
     long begin = System.currentTimeMillis();
     sort(nums);
     long end = System.currentTimeMillis();
     System.out.println((end - begin)); // 以这个时间为标准,越小越好。
       }
   public static int[] sort(int[] nums) {
     // 您的排序代码放在这里啦
     return nums;
   }
}
理论上,任何排序都可以在时间复杂度为O(n),空间复杂度为O(1)。
我的代码
using System;
namespace ConsoleApplication1
{
     class Program
     {
         static int MaxRange = 20080623;
         static void Main(string[] args)
         {
             Test(10*10000);
             Console.Read();
             Test(100*10000);
             Console.Read();
             Test(1000*10000);
             Console.Read();
         }
         public static void Test(int MAX)
         {            
             int[] nums = new int[MAX];
             Random r = new Random(MaxRange);
             for (int i = 0; i < MAX; i++)
             {
                 nums[i] = r.Next(MAX);
             }
             long begin = System.DateTime.Now.Ticks;
             Sort(nums);
             long end = System.DateTime.Now.Ticks;
             Console.WriteLine("总共" + MAX/10000 + "万数据,用时" + System.TimeSpan.FromTicks(end - begin).Milliseconds + "豪秒");            
         }
         public static void Sort(int[] a)
         {
             int[] p = new int[MaxRange + 1];
             for (int i = 0; i <= MaxRange; i++)
             {
                 p[i] = 0;
             }
             for (int i = 0; i <a.Length; i++)
             {
                p[a[i]]++;
             }
             for (int i = 0, j = 0; i <= MaxRange; i++)
             {
                 while (p[i] > 0)
                 {
                     a[j++] = i;
                     p[i]--;
                 }
             }               
         }
     }
}
10万需要187毫秒  
100万需要250毫秒  
1000万需要984毫秒  
------解决方案--------------------顶一下..~
------解决方案--------------------http://topic.csdn.net/u/20080624/11/55e5a350-d260-4a35-a02a-71b4c1795a00.html?seed=398337064
------解决方案--------------------支持!~
------解决方案--------------------oo