为了账号安全,请及时绑定邮箱和手机立即绑定

对具有嵌套 For 循环的数字元组列表进行排序。.净重 4.0 C#

对具有嵌套 For 循环的数字元组列表进行排序。.净重 4.0 C#

C#
慕侠2389804 2022-08-20 16:38:13
我有一个数字元组列表,并希望使用嵌套的For循环按Item1对其进行排序。我知道我可以只做List.Sort();但是我也想用For循环来做,这样我就可以比较性能。我感谢任何帮助。        List<Tuple<double, int, int>> FHM = new List<Tuple<double, int, int>>();         FHM.Add(Tuple.Create(2500.00, 1, 5));        FHM.Add(Tuple.Create(2400.00, 2, 300));            FHM.Add(Tuple.Create(2300.00, 4, 10));        FHM.Add(Tuple.Create(2600.00, 1, 325));我试图实现下面的代码,对嵌套的for循环的双精度列表进行精细排序,但我无法为元组重新编码它...List<double> FH = new List<double>() { 2510, 2509, 2501.5, 2501.75 };        var S1 = Stopwatch.StartNew();        double temp;        for (int i = 0; i < FH.Count; i++)        {            for (int n = 0; n < i; n++)            {                if (FH[n] > FH[i])                {                    temp = FH[i];                    FH[i] = FH[n];                    FH[n] = temp;                }            }        }        S1.Stop();        Console.WriteLine($"S1 Ticks = " + S1.ElapsedTicks);/* 使用 ForLoop 的已用次数为 4000。而与FH。排序();均为 16000。因此,我希望带有元组的ForLoop版本对于我正在处理的短列表将表现得更好。*/
查看完整描述

2 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

由于您似乎不关心排序算法本身,因此您可以迭代元组并将排序卸载到排序列表,如下所示:


对数字元组列表进行排序


using System;

using System.Collections.Generic;


namespace ConsoleApp

{

    public class Program

    {

        static void Main(string[] args)

        {

            List<Tuple<double, int, int>> FHM = new List<Tuple<double, int, int>>();

            FHM.Add(Tuple.Create(2500.00, 1, 5));

            FHM.Add(Tuple.Create(2400.00, 2, 300));

            FHM.Add(Tuple.Create(2300.00, 4, 10));

            FHM.Add(Tuple.Create(2600.00, 1, 325));


            var sorted = new SortedList<double, Tuple<double, int, int>>();

            foreach (Tuple<double, int, int> t in FHM)

            {

                sorted.Add(t.Item1, t);

            }

        }

    }

}


查看完整回答
反对 回复 2022-08-20
?
四季花海

TA贡献1811条经验 获得超5个赞

        var S2 = Stopwatch.StartNew();


        var temp = Tuple.Create(0.00, 0, 0);


        for (int i = 0; i < FHM.Count; i++)

        {

            for (int n = 0; n < i; n++)

            {

                if (FHM[n].Item1 > FHM[i].Item1)

                {

                    temp = FHM[i];

                    FHM[i] = FHM[n];

                    FHM[n] = temp;

                }

            }

        }


        S2.Stop();

        Console.WriteLine("Ticks S2 ForLoop = " + S2.ElapsedTicks); // 4000 ElapsedTicks


        S2.Reset();

        S2.Start();


        FHM.Sort();


        S2.Stop();

        Console.WriteLine("Ticks S2 List.Sort(); = " + S2.ElapsedTicks); // 700000 ElapsedTicks


查看完整回答
反对 回复 2022-08-20
  • 2 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信