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