Информация об изменениях

Сообщение Re[4]: Oberon vs C# от 12.04.2024 21:01

Изменено 12.04.2024 21:07 syrompe

Re[4]: Oberon vs C#
Окей, принимается. В исходном варианте такой же N^2.
Запустил ваш код и дело таки похоже в делегате. Ну скорее всего в лишнем копировании данных да его вызова.

Вот такой код работает на 12 секунд быстрее вашего (21с против 33с) на моей машине:
using System.Diagnostics;

var m = 100_000;
var a = new double[m];
var s = (double)m;
for (var i = 0; i < m; i++)
{
    a[i] = s;
    s = s - 1;
}
var sw = new Stopwatch();
sw.Start();
Sort(a);

Console.WriteLine("HeLLO");
Console.WriteLine(sw.Elapsed);

static void Sort(double[] a)
{
    for (var i = 0; i < a.Length; i++)
        for (var j = 0; j < a.Length - 1 - i; j++)
            if (a[j + 1] < a[j])
            {
                var t = a[j+1];
                a[j + 1] = a[j];
                a[j] = t;
            }
}
Re[4]: Oberon vs C#
Окей, принимается. В исходном варианте такой же N^2.
Запустил ваш код и дело таки похоже в делегате. Ну скорее всего в лишнем копировании данных для его вызова.

Вот такой код работает на 12 секунд быстрее вашего (21с против 33с) на моей машине:
using System.Diagnostics;

var m = 100_000;
var a = new double[m];
var s = (double)m;
for (var i = 0; i < m; i++)
{
    a[i] = s;
    s = s - 1;
}
var sw = new Stopwatch();
sw.Start();
Sort(a);

Console.WriteLine("HeLLO");
Console.WriteLine(sw.Elapsed);

static void Sort(double[] a)
{
    for (var i = 0; i < a.Length; i++)
        for (var j = 0; j < a.Length - 1 - i; j++)
            if (a[j + 1] < a[j])
            {
                var t = a[j+1];
                a[j + 1] = a[j];
                a[j] = t;
            }
}