以下本代碼是用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;
}