C# shellsort和insertionsort的运行时间根据执行顺序而变化

C# shellsort和insertionsort的运行时间根据执行顺序而变化,c#,sorting,datetime,C#,Sorting,Datetime,我试图比较两种不同排序算法的运行时间。这里的列表1等于列表2。我原以为shell排序比插入排序快,但尽管first WriteLine不同,它通常打印这样的内容=00:00:00.0035037。但是,第二张照片要么打印00:00:00,要么打印比第一张小的东西。我想也许插入排序更适合列表的当前状态,但是即使我交换第7行和第2行,我仍然得到相同的结果。这是什么原因造成的?为什么第二个执行的函数运行得更快?还是我用的日期完全错了? 编辑:我用秒表代替了另一篇文章中建议的DateTime类。结果几乎

我试图比较两种不同排序算法的运行时间。这里的列表1等于列表2。我原以为shell排序比插入排序快,但尽管first WriteLine不同,它通常打印这样的内容=00:00:00.0035037。但是,第二张照片要么打印00:00:00,要么打印比第一张小的东西。我想也许插入排序更适合列表的当前状态,但是即使我交换第7行和第2行,我仍然得到相同的结果。这是什么原因造成的?为什么第二个执行的函数运行得更快?还是我用的日期完全错了? 编辑:我用秒表代替了另一篇文章中建议的DateTime类。结果几乎是一样的。第二个通常跑得更快,但有时比第一个慢。我还使用预先编写的shellsort代码来查看我的实现是否糟糕,但这也是一条死胡同

根据要求,shellsort和insertionsort实现

       1/  DateTime before = DateTime.Now;
       2/  shellSort(List1);
       3/  DateTime after = DateTime.Now;
       4/  Console.WriteLine(after - before);
       5/
       6/  before = DateTime.Now;
       7/  insertionSort(List2);
       8/  after = DateTime.Now;
       9/  Console.WriteLine(after - before);
static void shellSort(列表编号)//我在网上找到的实现
{
int i,j,增量,温度;
增量=3;
而(增量>0)
{
对于(i=0;i=增量)和&(数字[j-增量]>温度))
{
数字[j]=数字[j-增量];
j=j-增量;
}
数字[j]=温度;
}
如果(增量/2!=0)
增量=增量/2;
否则如果(增量==1)
增量=0;
其他的
增量=1;
}
}
公共静态void insertionSort(列表编号)
{
int i=0;
while(i!=number.Count)
{
int k=i;
而(k!=0&&numbers[k]
这也是我对shellsort的实现

static void shellSort(List<int> numbers) // Implementation i found online
        {
            int i, j, increment, temp;
            increment = 3;
            while (increment > 0)
            {
                for (i = 0; i < numbers.Count ; i++)
                {
                    j = i;
                    temp = numbers[i];
                    while ((j >= increment) && (numbers[j - increment] > temp))
                    {
                        numbers[j] = numbers[j - increment];
                        j = j - increment;
                    }
                    numbers[j] = temp;
                }
                if (increment / 2 != 0)
                    increment = increment / 2;
                else if (increment == 1)
                    increment = 0;
                else
                    increment = 1;
            }
        }

public static void insertionSort(List<int> numbers)
        {
            int i = 0;
            while (i != numbers.Count)
            {
                int k = i;
                while (k != 0 && numbers[k] < numbers[k - 1])
                {
                    int temp = numbers[k - 1];
                    numbers[k - 1] = numbers[k];
                    numbers[k] = temp;
                    k--;
                }
                i++;
            }
        }
publicstaticvoidshellsort(列表列表)
{
int n=列表计数;
int gap=(Liste.Count-1)/2;
而(差距>0)
{
int i=0;
对于(int k=gap;k=0)
{
if(Liste[p]>Liste[m])
{
int temp=Liste[p];
Liste[p]=Liste[m];
Liste[m]=温度;
m=p;
}
其他的
打破
p=p-间隙;
}
i++;
}
差距=差距/2;
}
}

还最好看看您是如何实现
shellSort
insertionSort
方法的。我根据请求共享了实现。还最好看看您是如何实现
shellSort
insertionSort
方法的。我根据请求共享了实现
public static void shellSort(List<int> Liste)
        {
            int n = Liste.Count;
            int gap = (Liste.Count - 1) / 2;
            while (gap > 0)
            {
                int i = 0;
                for(int k = gap; k < n; k++) { 

                    int p = i;
                    int m = k;
                    while (p >= 0)
                    {

                        if (Liste[p] > Liste[m])
                        {
                            int temp = Liste[p];
                            Liste[p] = Liste[m];
                            Liste[m] = temp;
                            m = p;
                        }
                        else
                            break;
                        p = p - gap;
                    }
                    i++;
                }
                gap = gap / 2;
            }
        }