最近看到一个有意思的题目:波斯公主选驸马链接 ,手痒想写代码模拟实现一
下。正好在做scala的项目,自然就想用scala来实现。
模型里首先要实现一个”洗牌算法” ,该算法用java实现的话如下:
void MySwap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
void Shuffle(int n)
{
for(int i=n-1; i>=1; i--)
{
MySwap(num[i], num[rand()%(i+1)]);
}
}
很简单,利用java的引用就可以用Myswap函数来交换两者的值,但是这在scala里是行不通的,scala函数只接受val,也就是常量。
怎么办呢?想到了scala里Array的特性:本身是常量,但其元素可以修改,于是实现代码:
def swap(arr:Array[Int],a:Int,b:Int)={
val tmp = arr(a)
arr(a)=arr(b)
arr(b)=tmp
}
def shuffle(arr:Array[Int])={
val t = new Random()
for(i <- (1 to arr.length-1).toArray.reverse)
swap(arr,i,t.nextInt(i+1))
}
之后,用一个 val arr = (0 to 99).toArray 带入函数shuffle中即可
本文介绍如何使用Scala语言实现一种洗牌算法。该算法通过随机交换数组中的元素位置来达到随机排序的效果。文章提供了具体的Scala代码实现,并展示了如何在Scala项目中应用此算法。
351

被折叠的 条评论
为什么被折叠?



