我写了一个应用程序,它是一个自定义控制台,允许执行各种命令。其中一个命令允许对整数数组进行排序。输入数据是一个字符串,它是一个用逗号分隔的数字的列表。
我的问题是-如何尽可能减少排序代码的运行时复杂性?
using System;
using System.Collections.Generic;
using CustomConsole.Common;
namespace Shell_Commander.Commands
{
class SortCommand : ICommand
{
private string _sortCommandName = "sort";
public string Name { get { return this._sortCommandName; } set { _sortCommandName = value; } }
public string Execute(string parameters)
{
var splittedParameters = parameters.Split(",",StringSplitOptions.RemoveEmptyEntries);
var arr = new List<int>();
int number;
int parameterIndex = 0;
foreach (var item in splittedParameters)
{
parameterIndex++;
if (int.TryParse(item, out number))
{
arr.Add(number);
}
else
{
Console.WriteLine($"The {parameterIndex}'st parameter isn't a number. Value: '{item}'.");
}
}
int temp = 0;
for (int write = 0; write < arr.Count; write++)
{
for (int sort = 0; sort < arr.Count - 1; sort++)
{
if (arr[sort] > arr[sort + 1])
{
temp = arr[sort + 1];
arr[sort + 1] = arr[sort];
arr[sort] = temp;
}
}
}
var result = "";
Console.Write("The sort result is: ");
for (int i = 0; i < arr.Count; i++)
{
result += arr[i] + " ";
Console.Write(arr[i] + " ");
}
Console.WriteLine();
return result;
}
}
}
示例-对于“ 4,1,2”输入,输出为:
"The sort result is: 1 2 4".
答案 0 :(得分:2)
您需要阅读this和that。实际上,您可以简单地使用LINQ's OrderBy方法,该方法在内部使用QuickSort。
因此,这是解决方案,而不是使用双for
,请使用以下方法:
var sortedArray = arr.OrderBy(x => x).ToArray();
答案 1 :(得分:1)
为什么不只对数组变量调用Sort method来代替您的小排序例程。
arr.Sort();