把1000個數隨機放到1000個位置。
這也就是一個簡單的面試題。覺得比較有意思。就順帶寫一下
舉個簡單的例子吧。
學校統一考試的時候 有 1000個人,然后正好有 1000個考試位置,需要隨機排列。那么就有了如下的代碼。
private List<int> getList()
{
Random random = new Random();
List<int> list = new List<int>();
for (int i = 0; i < 1000; i++)
{
//為數組賦值
list[i] = i + 1;
}
for (int i = 0; i <1000; i++)
{
int temp;
int j = random.Next(0, 999);
//交換兩個數據的值
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
return list;
}
這樣我們再改裝一下 假設我們就知道了 這些學生的ID 並且放到了一個list中
就有了如下的
private List<int> getList( List<int> list)
{
Random random = new Random();
for (int i = 0; i <list.Count; i++)
{
int temp;
int j = random.Next(0, list.Count-1);
//交換兩個數據的值
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
return list;
}
這樣就簡單封裝了獲取隨機順序了。
可以按照 返回的list 安排座位了。 復雜度為O(1000)
最后再改裝一下 變成一個common 方法就是終極版啦。任意隨機的list
private List<T> getList<T>( List<T> list)
{
Random random = new Random();
for (int i = 0; i <list.Count; i++)
{
T temp;
int j = random.Next(0, list.Count-1);
//交換兩個數據的值
temp = list[j];
list[j] = list[i];
list[i] = temp;
}
return list;
}
添加一個static 就可以放到工具方法