C#

Сколько времени займет на С# выполнение этого алгоритма сортировки массива?

пример написан на языке PureBasic 6.0.0

N=20000
Dim A.i(N)
For i=0 To N-1
A(i)=Random(N,0)
Next
t=ElapsedMilliseconds()
For I = 0 To N-2
For J = 0 To N-2
If A(J) > A(J+1)
P = A(J)
A(J) = A(J+1)
A(J+1) = P
EndIf
Next J
Next I
Debug ElapsedMilliseconds()-t

оператор Debug выполняет печать на экран
оператор ElapsedMilliseconds() считает время в миллисекундах,остальное думаю всё понятно..
Артем Иванов
Артем Иванов
28 684
пузырек:
 using System.Diagnostics; 

Random rnd = new Random();
int N = 20000;
int[] arr = Enumerable.Range(0, N)
.Select(x => rnd.Next(0,N))
.ToArray();
Stopwatch sw = Stopwatch.StartNew();
int temp;
for (int i = 0; i < N-1; ++i)
{
for (int j = 0; j < N - 1; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
sw.Stop();
Console.WriteLine($"{sw.ElapsedMilliseconds} ms");
1550-1800 мс

встроенная сортировка.

 using System.Diagnostics; 

Random rnd = new Random();
int N = 20_000_000;
int[] arr = Enumerable.Range(0, N)
.Select(x => rnd.Next(0,N))
.ToArray();
Stopwatch sw = Stopwatch.StartNew();
Array.Sort(arr);
sw.Stop();
Console.WriteLine($"{sw.ElapsedMilliseconds} ms");
20М чисел за 1300-1450 мс

C#11 ryzen 3600x
Саня Волошенко
Саня Волошенко
10 596
Лучший ответ
Артем Иванов спасибо,уточните пожалуйста версию ОС на компе?
Артем Иванов набрал ваш код пузырек,при выполнении выдает ошибку:
main.cs(11,0): error CS1525: Unexpected symbol `Random'
Compilation failed: 1 error(s), 0 warnings
Это самый ужасный пузырь из всех возможных, поэтому долго, особенно по сравнению со стандартным методом:

 //
const int n = 20000;
Random r = new Random(DateTime.Now.Millisecond);
int[] a = Enumerable.Range(0, n).Select(x => r.Next(n)).ToArray();
DateTime dt = DateTime.Now;
Array.Sort(a);
TimeSpan ts = DateTime.Now - dt;
Console.WriteLine("Quicksort: {0}", ts.ToString());
a = Enumerable.Range(0, n).Select(x => r.Next(n)).ToArray();
dt = DateTime.Now;
for (int i=0; i < n - 2; i++)
for (int j = 0; j < n - 2; j++)
if (a[j] > a[j+1])
{
int p = a[j];
a[a[j]] = a[j+1];
a[j+1] = p;
}
ts = DateTime.Now - dt;
Console.WriteLine("Full bubble: {0}", ts.ToString());
Console.ReadLine();
Артем Иванов спасибо за прогон теста, если я верно понял то время прогона 761мс,а методом быстрой сортировки 1.99мс
Артем Иванов уточните пожалуйста версию Си,в котором вы прогоняли этот код и версию ОС на компе?
В среднем 730 мс.
Мансур Рахимов
Мансур Рахимов
15 185
Артем Иванов спасибо,можете уточнить марку процессора,версию ОС на компе и версию Си?