Самый эффективный способ случайной «сортировки» (перемешивания) списка целых чисел в C # - PullRequest
51 голосов
/ 17 декабря 2008

Мне нужно случайным образом "отсортировать" список целых чисел (0-1999) наиболее эффективным способом. Есть идеи?

В настоящее время я делаю что-то вроде этого:

bool[] bIndexSet = new bool[iItemCount];

for (int iCurIndex = 0; iCurIndex < iItemCount; iCurIndex++)
{
    int iSwapIndex = random.Next(iItemCount);
    if (!bIndexSet[iSwapIndex] && iSwapIndex != iCurIndex)
    {
        int iTemp = values[iSwapIndex];
        values[iSwapIndex] = values[iCurIndex];
        values[iCurIndex] = values[iSwapIndex];
        bIndexSet[iCurIndex] = true;
        bIndexSet[iSwapIndex] = true;
    }
}

Ответы [ 12 ]

0 голосов
/ 15 марта 2010

Я создал метод, использующий временную Hashtable, позволяющую рандомизировать сортировку естественного ключа Hashtable. Просто добавьте, прочитайте и откажитесь.

int min = 1;
int max = 100;
Random random;
Hashtable hash = new Hashtable();
for (int x = min; x <= max; x++)
{
    random = new Random(DateTime.Now.Millisecond + x);
    hash.Add(random.Next(Int32.MinValue, Int32.MaxValue), x);
}
foreach (int key in hash.Keys)
{
    HttpContext.Current.Response.Write("<br/>" + hash[key] + "::" + key);
}
hash.Clear(); // cleanup
0 голосов
/ 17 декабря 2008

Разве не нравится эта работа?

var list = new[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
var random = new Random();
list.Sort((a,b)=>random.Next(-1,1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...