如何最小化排序运行时的复杂性?

时间:2019-05-04 19:16:37

标签: c# .net-core

我写了一个应用程序,它是一个自定义控制台,允许执行各种命令。其中一个命令允许对整数数组进行排序。输入数据是一个字符串,它是一个用逗号分隔的数字的列表。

我的问题是-如何尽可能减少排序代码的运行时复杂性?

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".

2 个答案:

答案 0 :(得分:2)

您需要阅读thisthat。实际上,您可以简单地使用LINQ's OrderBy方法,该方法在内部使用QuickSort

因此,这是解决方案,而不是使用双for,请使用以下方法:

var sortedArray = arr.OrderBy(x => x).ToArray();

答案 1 :(得分:1)

为什么不只对数组变量调用Sort method来代替您的小排序例程。

arr.Sort();