我代表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