C# 如何使DualPivot快速排序更好/更快

C# 如何使DualPivot快速排序更好/更快,c#,quicksort,C#,Quicksort,标题已经这样写了,我在问如何让我的代码更快或更好。现在我有一个问题,我的双枢轴快速排序比普通的快速排序慢得多,也不能处理大的数字。现在我只想输入这个方法的代码,但是如果你愿意,我也可以发布主方法,这样你就可以看到我的输入了 公共静态列表排序(列表输入,bool启动) { 如果(input.Count>1) { int LP=输入[0]; int RP=input[input.Count-1]; List lessLP=新列表(); List greatRP=新列表(); List between

标题已经这样写了,我在问如何让我的代码更快或更好。现在我有一个问题,我的双枢轴快速排序比普通的快速排序慢得多,也不能处理大的数字。现在我只想输入这个方法的代码,但是如果你愿意,我也可以发布主方法,这样你就可以看到我的输入了

公共静态列表排序(列表输入,bool启动)
{
如果(input.Count>1)
{
int LP=输入[0];
int RP=input[input.Count-1];
List lessLP=新列表();
List greatRP=新列表();
List betweenLPRP=新列表();
如果(LP>RP)
{
int sp=LP;
LP=RP;
RP=sp;
}
for(inti=1;iRP)
{
greatRP.Add(输入[i]);
}
else if(输入[i]>=LP和输入[i]左)
{
if(arr[左]>arr[右])交换(参考arr,左,右);
int p=arr[左]、q=arr[右];
int l=left+1,g=right-1,k=1;
while(k=q)
{
而(arr[g]>q&k
您对该引用代码的翻译有一个输入错误

在这一行:

int l=left+1,g=right-1,k=1;

您拥有的最后一个
1
(一)应该是
l
(小写l)

顺便说一句,由于数组在
c#
中定义为引用类型,因此
arr
参数上的
ref
修饰符是不必要的。仅当您希望从方法中整体替换整个参数时才需要此修饰符(如
arr=new…
)并在调用者中反映该更改。这适用于
快速排序
交换
。在这里,
ref
只会降低代码的效率


另一个小问题是,引用的代码(和您的代码)存在一些低效性,它使用相同的
i
j
参数调用
swap
,但这并不影响有效性,只影响速度。

您在翻译引用的代码时有输入错误

在这一行:

int l=left+1,g=right-1,k=1;

您拥有的最后一个
1
(一)应该是
l
(小写l)

顺便说一句,由于数组在
c#
中定义为引用类型,因此
arr
参数上的
ref
修饰符是不必要的。仅当您希望从方法中整体替换整个参数时才需要此修饰符(如
arr=new…
)并在调用者中反映该更改。这适用于
快速排序
交换
。在这里,
ref
只会降低代码的效率


另一个小问题是引用的代码(以及您的代码)在使用相同的
i
j
参数调用
swap
时存在一些低效性-但不影响有效性,只影响速度。

如果您有工作代码并希望改进它,可能是比堆栈溢出更好的站点。您的动态分配正在扼杀您。DP快速排序可以通过这是一种就地排序,性能会更好。请看一个例子。好的,谢谢你们,我想我也相应地更新了我的问题。我希望你们或其他人能在这里帮助我。还有,我怎么能喜欢注释呢?如果你们有工作代码并想改进它,可能会是一个比堆栈溢出更好的站点。你们的动态分配正在扼杀你们e、 DP快速排序可以作为就地排序来实现,它的性能会更好。请看一个例子。好的,谢谢你们,我想我也相应地更新了我的问题。我希望你们或其他人能在这里帮助我。还有,我怎么能喜欢评论呢?非常感谢你们帮助我处理小写字母拼写和参考arr。这比k你今天过得很愉快非常感谢你帮我解决小写字母L的拼写错误,还有ref arr。很高兴知道。非常感谢你今天过得很愉快