大家有用C#写过排序算法吗?为什么我写的快速排序比插入排序还慢!?
测试用例是随机生成的10000个在0到1之间的随机数。
算法的执行时间我用StopWatch测的。
调用插入排序用时在300ms左右,而调用快速排序却要用到12000ms!!!!这是怎么回事?
我设置断点查看到排完序的数组,两个算法均没有问题。
快速排序是用递归写的,而插入排序没有递归,难道是C#调用系统堆栈很慢?
c#的内部机制我不太清楚,期待高手出来解答。
我把我的代码贴在下面:
public float[] Sort_Insert(float[] sequence, int low, int high)//插入排序
{
sorted = new float[sequence.Length];
sequence.CopyTo(sorted,0);
Stopwatch watch = new Stopwatch();//实例化跑马表
watch.Start();//开始计时
//-------------------
int i;
float temp;
for (int j = low + 1; j <= high; j++)
{
i = j - 1;
temp = sorted[j];
while (i >= low && sorted[i] > temp)//依次将j以前的元素后移一位
{
sorted[i + 1] = sorted[i];
i--;
}
sorted[i + 1] = temp;
}
//-------------------
watch.Stop();//计时停止
lbTime.Text = watch.ElapsedMilliseconds.ToString() + " ms";//得到运行的时间,毫秒级
return sorted;
}
-------------------------------------------------------------
public float[] Sort_Quick(float[] sequence, int low, int high)//快速排序
{
sorted = new float[sequence.Length];
sequence.CopyTo(sorted, 0);
Stopwatch watch = new Stopwatch();//实例化跑马表
watch.Start();//开始计时
//-------------------
int pivot;//枢轴
if (low < high)
{
pivot = Partition1(sorted, low, high);
Sort_Quick(sorted, low, pivot - 1);
Sort_Quick(sorted, pivot + 1, high);
}
//-------------------
watch.Stop();//计时停止
lbTime.Text = watch.ElapsedMilliseconds.ToString() + " ms";//得到运行的时间,毫秒级
return sorted;
}
private int Partition1(float[] sequence, int low, int high)
{
float temp = sequence[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++)
{
if (sequence[j] <= temp)
{
i++;
Exchange(i, j);//交换两数
}
}
Exchange(i + 1, high);//交换两数
return i + 1;
}
算法的执行时间我用StopWatch测的。
调用插入排序用时在300ms左右,而调用快速排序却要用到12000ms!!!!这是怎么回事?
我设置断点查看到排完序的数组,两个算法均没有问题。
快速排序是用递归写的,而插入排序没有递归,难道是C#调用系统堆栈很慢?
c#的内部机制我不太清楚,期待高手出来解答。
我把我的代码贴在下面:
public float[] Sort_Insert(float[] sequence, int low, int high)//插入排序
{
sorted = new float[sequence.Length];
sequence.CopyTo(sorted,0);
Stopwatch watch = new Stopwatch();//实例化跑马表
watch.Start();//开始计时
//-------------------
int i;
float temp;
for (int j = low + 1; j <= high; j++)
{
i = j - 1;
temp = sorted[j];
while (i >= low && sorted[i] > temp)//依次将j以前的元素后移一位
{
sorted[i + 1] = sorted[i];
i--;
}
sorted[i + 1] = temp;
}
//-------------------
watch.Stop();//计时停止
lbTime.Text = watch.ElapsedMilliseconds.ToString() + " ms";//得到运行的时间,毫秒级
return sorted;
}
-------------------------------------------------------------
public float[] Sort_Quick(float[] sequence, int low, int high)//快速排序
{
sorted = new float[sequence.Length];
sequence.CopyTo(sorted, 0);
Stopwatch watch = new Stopwatch();//实例化跑马表
watch.Start();//开始计时
//-------------------
int pivot;//枢轴
if (low < high)
{
pivot = Partition1(sorted, low, high);
Sort_Quick(sorted, low, pivot - 1);
Sort_Quick(sorted, pivot + 1, high);
}
//-------------------
watch.Stop();//计时停止
lbTime.Text = watch.ElapsedMilliseconds.ToString() + " ms";//得到运行的时间,毫秒级
return sorted;
}
private int Partition1(float[] sequence, int low, int high)
{
float temp = sequence[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++)
{
if (sequence[j] <= temp)
{
i++;
Exchange(i, j);//交换两数
}
}
Exchange(i + 1, high);//交换两数
return i + 1;
}
...全文
相关推荐
TMS320F2812伺服电机控制器原理图+PCB
TMS320F2812伺服电机控制器原理图+PCB。基于protel绘制。需要的拿去。 TMS320F2812伺服电机控制器原理图+PCB。基于protel绘制。需要的拿去。
DSP中的基于TMS320F2812无刷直流电机控制系统设计与实现
1 引言 无刷直流电机利用电子换向器取代了传统直流电机中的机械电刷和机械换向器,因此不仅保留了直流电动机运行效率高和调速性能好等优点,又具有交流电动机的结构简单、运行可靠、维护方便等优点。由于不受机械换向限制,易于做到大容量、高转速,目前在航天、军工、数控、冶金、医疗器械等领域已得到大量应用。TMSF2812 DSP是TI公司新推出的基于TMS320C2xx内核的定点数字信号处理器。器件上集成了多种先进的外设,具有灵活、可靠的控制和通信模块,完全可以采用单芯片实现电机控制系统的控制和通信功能,使得电机控制系统简单化、模块化,为电机及其他运动控制领域应用的实现提供了良好的平台。本文设计和实现
TMS320F2812变频器、电机控制原理图及程序
主控TMS320F2812,SPWM调制技术,电动机控制开发版原理图及程序
TMS320F2812官方例程.rar
TMS320F2812官方例程 TMS320F2812 2812 DSP 实例 官方
基于DSP2812的无刷直流电机伺服控制程序,用PID算法控制电机的转动.rar
基于DSP2812的无刷直流电机伺服控制程序,用PID算法控制电机的转动.rar


