我正在练习并实现一些众所周知的排序算法,我认为如果我们从侧面查看列表,它应该出现已排序的状态而不需要进行任何操作(请参见代码,它相当自说明)。我很确定这已经被想到/完成了,我想知道它实际上被称为什么。
以下是我的实现方式。我知道当内容的“最大-最小”范围很大时,它的性能会很差,并且可能只适用于整数。 (但是在非常大的列表上,当内容来自某个相对较小的范围时(在我的PC上少于110000000种变化),它看起来非常好地运行)
获取此名称的主要原因是查看进一步的改进和变化:
以下是我的实现方式。我知道当内容的“最大-最小”范围很大时,它的性能会很差,并且可能只适用于整数。 (但是在非常大的列表上,当内容来自某个相对较小的范围时(在我的PC上少于110000000种变化),它看起来非常好地运行)
获取此名称的主要原因是查看进一步的改进和变化:
void MainWindow(){
for (int a = 0; a < 130000000; a++)
{
rList.Add(rand.Next(1, 110000000));
}
Thread t1 = new Thread(() =>
{
SortYAxis(rList);
});
}
void SortYAxis(List<int> list)
{
int max = int.MinValue;
int min = int.MaxValue;
foreach (int a in list)//Get max/min range
{
if (max < a)
{
max = a;
}
else if (min > a)
{
min = a;
}
}
int[] yList = new int[max - min + 1];
foreach (int a in list)//Flatten along Y axis
{
yList[a - min]++;
}
for (int i = 0, a = 0; i < yList.Length; i++)//Read down Y axis
{
while (yList[i] != 0)
{
list[a++] = i + min;
yList[i]--;
}
}
}