把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 就可以放到工具方法
转载于:https://www.cnblogs.com/jixinyu12345/p/4872546.html
