110,533
社区成员
发帖
与我相关
我的任务
分享
Zswang_0 开始运行
56
488
576
91
共耗时1141毫秒
using System;
namespace ConsoleApplication1
{
class Program
{
const int max = 1000; // 最大取值范围
//const int count = 5000; // 小数据量
const int count = 100000000; // 数据量
const int resultLen = 4; // 返回长度
static void Main(string[] args)
{
var random = new Random(2010); // 固定随机种子,确保大家测试数据一致
var data = new int[count];
#region 生成测试数据,不在性能计算之内
for (var i = 0; i < count; i++) data[i] = random.Next(max);
#endregion 生成测试数据
#region 计算性能
Console.WriteLine("Zswang_0 开始运行");
var tick = Environment.TickCount;
foreach (var i in Zswang_0(data, 4))
{
Console.WriteLine(i);
}
Console.WriteLine("共耗时{0}毫秒", Environment.TickCount - tick);
#endregion
Console.ReadKey();
}
// 作者_版本
static int[] Zswang_0(int[] data, int len)
{
// 计算每个数据出现的次数
var dict = new int[max];
for (var i = 0; i < count; i++) dict[data[i]]++;
// 按出现的次数排序
var indexs = new int[max];
for (var i = 0; i < max; i++) indexs[i] = i; // 获得完整的序号
Array.Sort(indexs, delegate(int a, int b)
{
return dict[b] - dict[a];
});
/*
for (var i = 0; i < 100; i++)
{
Console.WriteLine("{0}={1}", indexs[i], dict[indexs[i]]);
}
//*/
var result = new int[len];
for (var i = 0; i < len; i++) result[i] = indexs[i]; // 输出
return result;
}
}
}
// with_版本
static int[] Zswang_2(int[] data,int len)
{
// 计算每个数据出现的次数
var dict = new int[max];
int cc_0 = count / 16;
int cc_1 = count % 16;
int ii = 0;
for(ii = 0;ii < cc_0;ii++)
{
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
dict[data[ii++]]++;
}
for(;ii < cc_1;ii++)
{
dict[data[ii++]]++;
}
// 按出现的次数排序
var indexs = new int[max];
for(var i = 0;i < max;i++) indexs[i] = i; // 获得完整的序号
Array.Sort(indexs,delegate(int a,int b)
{
return dict[b] - dict[a];
});
/*
for (var i = 0; i < 100; i++)
{
Console.WriteLine("{0}={1}", indexs[i], dict[indexs[i]]);
}
//*/
var result = new int[len];
for(var i = 0;i < len;i++) result[i] = indexs[i]; // 输出
return result;
}