主题:[讨论]请多指教~~~
做了个可以在任意范围内产生任意数量并且不重复的随机数..并从小到大排序..
但是总觉得这算法不够好...请高手指教~~
using System;
using System.Collections.Generic;
using System.Text;
namespace random
{
class Program
{
// public static int u = 0;
static int[] GetRandomNO(int x,int y)
{
int[] n = new int[x];
Random r = new Random();
for (int i = 0; i < x; i++)
{
n[i] = r.Next(y);
}
return n;
}
static int[] Clear(int[] a,int y)
{
int l = 0;
int[] b=new int[a.Length];
for (int i = 0; i < a.Length-1; i++)
{
for (int j = i+1; j < a.Length; j++)
{
if (a[i] == a[j])
{
a[j] = y;
}
}
}
for (int k = 0; k < a.Length; k++)
{
if (a[k] != y)
{
b[l]= a[k];
l = l + 1;
}
/* else
{
u++;
}*/
}
return b;
}
static int[] Order(int[] a,int y)
{
int[] b = new int[a.Length];
for (int i = 0; i < a.Length; i++)
{
int j=1;
int f=0;
int x=0;
while (j < a.Length)
{
if (a[f] > a[j])
{
x = a[j];
f = j;
j = f + 1;
}
else
{
x = a[f];
j++;
}
}
b[i] = x;
if (x == a[f])
{
a[f] = y;
}
if (x == a[j-1])
{
a[j - 1] = y;
}
}
return b;
}
static void Main(string[] args)
{
int d = Convert.ToInt32(args[0]);
int e = Convert.ToInt32(args[1]);
int[] a = GetRandomNO(d,e);
int[] x = Clear(a,e);
int[] y = Order(x,e);
int k = 0;
for (int c = 0;c< y.Length; c++)
{
if (y[c] != 0 && y[c] != e)
{
Console.Write("a[{0}]={1}", c, y[c]);
Console.Write("\n");
}
else
{
k++;
}
}
/* int b=0,i=0;
int j=1;
while(j<y.Length)
{
if(a[i]<a[j])
{
if(a[i]!=1000
b=a[j];
i=j;
j=i+1;
}
else
{
b=a[i];
j++;
}
}
* */
Console.Write("the max number is {0}",y[d-1]);
Console.Write("the total random number is{0}",d- k);
}
}
}
但是总觉得这算法不够好...请高手指教~~
using System;
using System.Collections.Generic;
using System.Text;
namespace random
{
class Program
{
// public static int u = 0;
static int[] GetRandomNO(int x,int y)
{
int[] n = new int[x];
Random r = new Random();
for (int i = 0; i < x; i++)
{
n[i] = r.Next(y);
}
return n;
}
static int[] Clear(int[] a,int y)
{
int l = 0;
int[] b=new int[a.Length];
for (int i = 0; i < a.Length-1; i++)
{
for (int j = i+1; j < a.Length; j++)
{
if (a[i] == a[j])
{
a[j] = y;
}
}
}
for (int k = 0; k < a.Length; k++)
{
if (a[k] != y)
{
b[l]= a[k];
l = l + 1;
}
/* else
{
u++;
}*/
}
return b;
}
static int[] Order(int[] a,int y)
{
int[] b = new int[a.Length];
for (int i = 0; i < a.Length; i++)
{
int j=1;
int f=0;
int x=0;
while (j < a.Length)
{
if (a[f] > a[j])
{
x = a[j];
f = j;
j = f + 1;
}
else
{
x = a[f];
j++;
}
}
b[i] = x;
if (x == a[f])
{
a[f] = y;
}
if (x == a[j-1])
{
a[j - 1] = y;
}
}
return b;
}
static void Main(string[] args)
{
int d = Convert.ToInt32(args[0]);
int e = Convert.ToInt32(args[1]);
int[] a = GetRandomNO(d,e);
int[] x = Clear(a,e);
int[] y = Order(x,e);
int k = 0;
for (int c = 0;c< y.Length; c++)
{
if (y[c] != 0 && y[c] != e)
{
Console.Write("a[{0}]={1}", c, y[c]);
Console.Write("\n");
}
else
{
k++;
}
}
/* int b=0,i=0;
int j=1;
while(j<y.Length)
{
if(a[i]<a[j])
{
if(a[i]!=1000
b=a[j];
i=j;
j=i+1;
}
else
{
b=a[i];
j++;
}
}
* */
Console.Write("the max number is {0}",y[d-1]);
Console.Write("the total random number is{0}",d- k);
}
}
}