请问,C#中,有没有什么现成的给队列随机排序的方法?

aruaawai 2012-05-11 10:40:25
就是类似java中,Collections.shuffle的函数?
或者有没有其他符合平均分布的随机排序方法?
...全文
389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
画楼绣牡丹 2014-07-13
  • 打赏
  • 举报
回复
引用 10 楼 gxingmin 的回复:
[Quote=引用 4 楼 的回复:] C# code Random r = new Random((int) DateTime.Now.Ticks); var list = Enumerable.Range(0, 99).ToList(); list.Sort((x, y) => r.Next(-1,1));//这一句就行了 list.ForEac…… [/Quote] 当数组比较大时,运行几次会报错“无法排序,原因是 IComparer.Compare() 方法返回不一致的结果。一个值与本身比较不相等,或者一个值与另外一个值重复比较生成不同的结果。x:“0”,x 的类型:“Int32”,IComparer:“”。”
请问一下,我做排序的时候也出现这个报错。是因为数组比较大吗?那怎么解决呢?
DGLZ_20090605 2014-04-14
  • 打赏
  • 举报
回复
引用 13 楼 aruaawai 的回复:
找到了,原来c#的随机数本来就做的比较好,直接用系统时间做随机数种子,取出来得就符合皮尔逊检验。。。。
请教楼主你说的这个符合皮尔逊检验的是指c#里面的Random()函数么?谢谢
aruaawai 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

抽了一下,这样也行,如7楼
C# code

Random r = new Random((int) DateTime.Now.Ticks);
Enumerable.Range(0, 99).OrderBy(x=>r.Next()).ToList().ForEach(x=>Console.Write(x+"\t"));
//list.Sort(……
[/Quote]

能用了,但是无法达到皮尔逊检验的要求。。。。。
aruaawai 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 5 楼 的回复:

引用 4 楼 的回复:

C# code

Random r = new Random((int) DateTime.Now.Ticks);
var list = Enumerable.Range(0, 99).ToList();
list.Sort((x, y) => r.Next(-1,1));//这一句就行了
list.ForEach(x=>……
[/Quote]

运行时候爆错了。。。。。
gxingmin 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
C# code


Random r = new Random((int) DateTime.Now.Ticks);
var list = Enumerable.Range(0, 99).ToList();
list.Sort((x, y) => r.Next(-1,1));//这一句就行了
list.ForEac……
[/Quote]

当数组比较大时,运行几次会报错“无法排序,原因是 IComparer.Compare() 方法返回不一致的结果。一个值与本身比较不相等,或者一个值与另外一个值重复比较生成不同的结果。x:“0”,x 的类型:“Int32”,IComparer:“”。”
newxdlysk 2012-05-11
  • 打赏
  • 举报
回复
抽了一下,这样也行,如7楼

Random r = new Random((int) DateTime.Now.Ticks);
Enumerable.Range(0, 99).OrderBy(x=>r.Next()).ToList().ForEach(x=>Console.Write(x+"\t"));
//list.Sort((x, y) => r.Next(-1,1));
//list.ForEach(x=>Console.Write(x+"\t"));
Console.Read();
newxdlysk 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:

C# code

Random r = new Random((int) DateTime.Now.Ticks);
var list = Enumerable.Range(0, 99).ToList();
list.Sort((x, y) => r.Next(-1,1));//这一句就行了
list.ForEach(x=>……


list.Sor……
[/Quote]
这段需运行在.net3.5上
theillusion 2012-05-11
  • 打赏
  • 举报
回复
用linq试试,arr = arr.OrderBy(x => rnd.Next())
NewUser2008 2012-05-11
  • 打赏
  • 举报
回复
随机生成-1 至1的值返回给Sort
aruaawai 2012-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C# code

Random r = new Random((int) DateTime.Now.Ticks);
var list = Enumerable.Range(0, 99).ToList();
list.Sort((x, y) => r.Next(-1,1));//这一句就行了
list.ForEach(x=>……
[/Quote]

list.Sort((x, y) => r.Next(-1,1));

这句是什么意思?不是C#代码阿,能解释一下吗?
newxdlysk 2012-05-11
  • 打赏
  • 举报
回复

Random r = new Random((int) DateTime.Now.Ticks);
var list = Enumerable.Range(0, 99).ToList();
list.Sort((x, y) => r.Next(-1,1));//这一句就行了
list.ForEach(x=>Console.Write(x+"\t"));
Console.Read();
aruaawai 2012-05-11
  • 打赏
  • 举报
回复
这一类的我找到很多了,都不符合皮尔逊检验。
我想找的是类似java 里面, Collections.Shuffle的方法,听说.net里面有这样的方法,而且符合皮尔逊算法,C值可以达到0.05的卡方值的程度
gxingmin 2012-05-11
  • 打赏
  • 举报
回复
如果要扩展到其他类型的数组队列,可以用泛型
//任意类型的队列随机排序
public static T[] RandSort<T>(T[] arry)
{
T[] arryNew = new T[arry.Length];
Random rnd = new Random();
int n = arry.Length;
int i = 0;
while (n > 0)
{
int index = rnd.Next(n);
arryNew[i] = arry[index];
arry[index] = arry[n - 1];
n--;
i++;
}

return arryNew;

}

//调用
string[] sArray = new string[] { "ab", "fs", "ta", "ds", "gd", "fafd" };
string[] sArrayRes = RandSort<string>(sArray);
gxingmin 2012-05-11
  • 打赏
  • 举报
回复
可以自己写一个
/// <summary>
/// 随机排序
/// </summary>
/// <param name="arry"></param>
/// <returns></returns>
public static int[] RandSort(int[] arry)
{
int[] arryNew = new int[arry.Length];
Random rnd = new Random();
int n = arry.Length;
int i = 0;
while (n > 0)
{
int index = rnd.Next(n);
arryNew[i] = arry[index];
arry[index] = arry[n-1];
n--;
i++;
}

return arryNew;

}

//调用
int[] arry = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int[] arryRes = RandSort(arry);
aruaawai 2012-05-11
  • 打赏
  • 举报
回复
找到了,原来c#的随机数本来就做的比较好,直接用系统时间做随机数种子,取出来得就符合皮尔逊检验。。。。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧