以下本代码是用C#实现时间复杂度为O(n)的算法.int[] myIntArray(int begin, int end, int num)用于产生num个在范围[begin,end]内的不重复随机数.int[] myIntArray(int begin, int end)用于产生范围[begin,end]内随机排列.
public int[] myIntArray(int begin, int end, int num)
{
int[] intArrayResult = new int[num];
int span = end - begin;
if (end >= begin && (end - begin) >= num && begin >= 0)
{
Random rnd = new Random(System.DateTime.Now.Millisecond);
ArrayList tempArray = new ArrayList();
for (int i = begin; i < end + 1; i++)
{
tempArray.Add(i.ToString());
}
for (int j = 0; j < num; j++)
{
int no = rnd.Next(span - j - 1);
int temp = System.Convert.ToInt32(tempArray[no]);
intArrayResult[j] = temp;
tempArray.Remove(intArrayResult[j].ToString());
}
}
return intArrayResult;
}
public int[] myIntArray(int begin, int end)
{
int num = end - begin + 1;
int[] intArrayResult = new int[num];
if (end >= begin && begin >= 0)
{
Random rnd = new Random(System.DateTime.Now.Millisecond);
ArrayList tempArray = new ArrayList();
for (int i = begin; i < end + 1; i++)
{
tempArray.Add(i.ToString());
}
for (int j = 0; j < num; j++)
{
int no = rnd.Next(num - j - 1);
int temp = System.Convert.ToInt32(tempArray[no]);
intArrayResult[j] = temp;
tempArray.Remove(intArrayResult[j].ToString());
}
}
return intArrayResult;
}