我花了一些时间在C#中实现快速排序算法。在完成后,我比较了我的实现和C#的Array.Sort方法的速度。
我只比较了对随机整数数组的排序速度。
这是我的实现:
static void QuickSort(int[] data, int left, int right)
{
int i = left - 1,
j = right;
while (true)
{
int d = data[left];
do i++; while (data[i] < d);
do j--; while (data[j] > d);
if (i < j)
{
int tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
else
{
if (left < j) QuickSort(data, left, j);
if (++j < right) QuickSort(data, j, right);
return;
}
}
}
性能(对于长度为100000000的随机int[]进行排序):
- 我的算法:14.21秒
- .Net Array<int>.Sort:14.84秒
有人知道如何更快地实现我的算法吗?
或者有人可以提供一个更快的实现(不一定是快速排序),以便运行更快吗?
注意:
- 请勿使用利用多个核/处理器来提高性能的算法
- 仅限有效的C#源代码
如果我在线,我将在几分钟内测试所提供的算法的性能。
编辑:
您认为对于包含小于8个值的部分使用理想的排序网络会提高性能吗?