Программа C#

Программа C#
Я написал программу которая случайным образом выдаёт номера в промежутке от 1 до 80 всего 20 номеров и сделал для нее пузырьковую сортировку
ПОМОГИТЕ ПОЖАЛУЙСТА КАК СДЕЛАТЬ ТАК ЧТО БЫ ВЫДАННЫЕ НОМЕРА НЕ ПОВТОРЯЛИСЬ
ОЧЕНЬ ПРОШУ
static void Main(string[] args)
{

int[] numbers = new int[20];
int number;
Random random = new Random();
for (int i = 0; i < 20; i++)
{
numbers = random.Next(0, 80);
}
int s = 1;
for (int j = 0; j < numbers.Length; j++)
for (int i = 0; i < numbers.Length - 1; i++)
{
if (numbers
* s > numbers[i + 1] * s)
{
//Меняем местами два соседних элемента массива
number = numbers
;
numbers
= numbers[i + 1];
numbers[i + 1] = number;

}
}
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers
);

}
Console.ReadKey();

  • Чтобы числаа не повторялись, надо:
    Вариант 1. Проверять, что сгенерированного числа еще не было. Код простой, но работает долго.
    Вариант 2. Сформировать массив из возможных значений (от 1 до 80), генерировать номер в массиве, переписывать число в результирующий массив, а на его место копировать последнее и сокращать массив:
    int size=80
    int rezerv[]=new int[size];
    ...
    for(...){
    int rnd=random.Next(0,size);
    numbers[ i ]=rezerv[ rnd ];
    rezerv[ rnd ] = rezerv[ --size ];
    }
  • а -- массив из 20-ти неповторяющихся чисел в промежутке от 1 до 80.

    using System;
    using System.Linq;

    class Program {
    static void Main(string[] args) {
    var r = new Random();
    var a = Enumerable.Range(1, 80).OrderBy(x => r.Next()).Take(20).ToArray();
    foreach (var e in a) Console.Write("{0} ", e);
    Console.WriteLine();
    Console.ReadKey();
    }
    }

    Вообще, проверка алгоритма сортировки подразумевает наличие в сортируемой последовательности повторяющихся чисел, так что зря все это.