gpt4 book ai didi

c# - C# 中最优雅的 shell 排序方式(梳状/递减增量排序)是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:53 25 4
gpt4 key购买 nike

有没有更好的方法使用 C# 进行 shell 排序?

// array of integers to hold values
private int[] a = new int[100];

// number of elements in array
private int count;

// Shell Sort Algorithm
public void sortArray()
{
int i, j, increment, temp;

increment = 3;

while( increment > 0 )
{
for( i=0; i < count; i++ )
{
j = i;
temp = a[i];

while( (j >= increment) && (a[j-increment] > temp) )
{
a[j] = a[j - increment];
j = j - increment;
}

a[j] = temp;
}

if( increment/2 != 0 )
{
increment = increment/2;
}
else if( increment == 1 )
{
increment = 0;
}
else
{
increment = 1;
}
}
}

顺便说一句,我想知道因为我有一些不同语言的“优雅”排序的不同示例(例如 C#F# 中的冒泡排序),我正在比较它们。在现实生活中,大部分时间我可能会在 C# 中使用以下内容:

Array.Sort( object[] )

我不在乎这些是不是“学术”和非实用模式。如果你愿意,你可以把我改成遗忘 :)

KA

最佳答案

您可以轻松进行的改进:

  • 不要在对象中保留状态。只需使用局部变量,这应该很容易做到。
  • 使用常规的 C# 名称,例如 ShellSort而不是 shellSort
  • 使用有意义的名称,例如 count而不是 x
  • 使用条件运算符,例如

    // This replaces your last 12 lines
    int halfIncrement = increment / 2;
    increment = halfIncrement != 0 ? halfIncrement : 1 - increment;
  • 使代码通用 - 为什么要限制自己使用整数?

  • 让你的方法获取有问题的数据,并将其设为 IList<T>
  • 通过 IComparer<T> 使排序顺序任意,提供使用默认值的重载。
  • 尽可能晚地声明变量以减少它们的范围并提高可读性

这实际上与排序相关的很少 - 我尚未验证您的代码是否实际上是合法的 shell 排序...

关于c# - C# 中最优雅的 shell 排序方式(梳状/递减增量排序)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1596346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com