7月7日は七夕でしたね。皆様、あまのじゃくは見れましたか?大阪はあいにくのお天気で見る事が出来ませんでした。
なんやらソート祭りの感がありますが、ソート済み配列をバラバラにしてみます。
その昔に、フィリピン大の学生にシャッフルするんだったら、こんな感じにしてみたらどう?って言われたのを思い出した。
結構前の事なので変に記憶していて、その子の意図と違うアルゴリズムと異なるかもしれないけど、
ソート済みのlistAをシャッフルしてlistBに突っ込むのをC#で書いてみた。
using System;
using System.Collections.Generic;
using System.Text;
namespace Shuffle
{
class Program
{
/// <SUMMARY>
/// ソート済み配列をシャッフルしる
/// </SUMMARY>
/// <PARAM name="data">ソート済み配列</PARAM>
static void Shuffle(int[] srcList, int[] dstList)
{
Random rand = new Random();
for (int i = 0; i < srcList.Length; i++)
{
int r = rand.Next(i);
if(r < i)
{
dstList[i] = dstList[r];
dstList[r] = srcList[i];
}
else
{
dstList[i] = srcList[i];
}
}
}
static void Main(string[] args)
{
int[] listA = new int[10];
int[] listB = new int[10];
// listAに数字を入れる
for (int i = 0; i < listA.Length; i++)
{
listA[i] = i;
}
// 混ぜる
Shuffle(listA, listB);
// listBの結果を出力する
for (int i = 0; i < listB.Length; i++)
{
Console.WriteLine(listB[i]);
}
}
}
}
絵で描いたら、こんな感じかな?
