所以我尝试在不使用 C# 中的 sort 函数的情况下按升序对列表进行排序,而且我有点新,所以我想知道我该怎么做?[复制]

So I'm trying to sort the list in ascending order without using the sort function in C# and I'm a bit new so I was wondering how could I do it? [duplicate]

提问人:newbie 提问时间:9/9/2022 最后编辑:Theodor Zouliasnewbie 更新时间:9/12/2022 访问量:177

问:

namespace Activity4 
{
  class Worksheet4
  {
    static void Main(string[] args)
    {
      //I'm limiting the user input to just 5
  
      List<int> Nums = new List<int>();
      while (Nums.Count < 5)
      {

            Console.Write("Enter the 1st number:");
            int Nums1 = Convert.ToInt32(Console.ReadLine());
            Nums.Add(Nums1);
            Console.Write("Enter the 2nd number:");
            int Nums2 = Convert.ToInt32(Console.ReadLine());
            Nums.Add(Nums2);
            Console.Write("Enter the 3rd number:");
            int Nums3 = Convert.ToInt32(Console.ReadLine());
            Nums.Add(Nums3);
            Console.Write("Enter the 4th number:");
            int Nums4 = Convert.ToInt32(Console.ReadLine());
            Nums.Add(Nums4);
            Console.Write("Enter the 5th number:");
            int Nums5 = Convert.ToInt32(Console.ReadLine());
            Nums.Add(Nums5);
          

这是我真的不知道如何在不使用 sort 函数的情况下按升序对其进行排序的部分,如果有一种更简单的方法可以让我单独识别每个输入哪个更低或不低,请启发我

            foreach (int x in Nums)
            {
              Console.WriteLine(x);
            }
         }   
      }
   }
}
C# 数组列表 while 循环 foreach

评论

0赞 David 9/9/2022
“我应该如何排序” - 通常人们会使用内置功能来完成此任务。“不使用排序函数” - 如果你不想使用内置功能,那么你可以编写自己的功能。查找“排序算法”,选择一个,然后进行尝试。当您尝试时,具体哪些内容无法按预期工作?
0赞 leigero 9/9/2022
你试过了什么?编写代码来做你面前有数字时会做的事情会有所帮助。你会如何用你的大脑在一张纸上对这些数字进行排序?看看第一个,如果它小于第二个,就把它移过来,然后看看第三个,依此类推。
2赞 9/9/2022
如果这是一项交给您(或自我分配)的任务,以帮助理解和练习排序算法,我建议从不起眼的(尽管非常慢)的气泡排序开始,它应该相对容易理解,因为它相当简单......
0赞 JonasH 9/9/2022
我要指出的是,由于在引入算法时,排序算法是一项标准任务,因此如果您四处搜索,就会有大量关于该主题的资源。所有不同类型的算法,几乎每种语言的实现,直观的可视化,基准测试,几乎可以满足您的任何需求。因此,我建议在发布之前多做一些研究。

答:

0赞 Tim Schmelter 9/9/2022 #1

你可以使用 的 OrderByLINQ

var sortedAscending = Nums.OrderBy(n => n);
foreach(int num in sortedAscending)
{
    Console.WriteLine(x);
}

如果想要相反的方向,请使用 。OrderByDescending

这两种方法都不会创建新集合,也不会修改 source-collection。它们使用延迟执行,这意味着它们只是执行排序的指令,而不是实际的排序。如果要创建新集合,可以附加 或 。ToListToArray

它们使用稳定的排序(与 List.Sort 不同),因此相等数字的顺序将保持不变。

0赞 Darshan Faldu 9/9/2022 #2

如果您不想使用任何函数,这里有一个简单的逻辑。SortOrderBy

List<int> UnSortedNums = new List<int>();
UnSortedNums.Add(20);
UnSortedNums.Add(50);
UnSortedNums.Add(10);
UnSortedNums.Add(10);
UnSortedNums.Add(30);

List<int> AscendingNums = new List<int>();

for (int i = 0; i < UnSortedNums.Count; i++)
{
    if(UnSortedNums.Any(x => !AscendingNums.Contains(x)))
    {
        int Min = UnSortedNums.Where(x => !AscendingNums.Contains(x)).Min();
        int Count = UnSortedNums.Where(x => x == Min).Count();
        for (int j = 0; j < Count; j++)
        {
            AscendingNums.Add(Min);
        }
    }
}

评论

0赞 Klaus Gütter 9/9/2022
如果一个数字多次出现,这将无法正常工作。它看起来像复杂度 O(N^3),它比几乎所有常见的算法(慢排序除外)都差