【问题标题】:C# Sort 3 arrays with Bubble sortC# 使用冒泡排序对 3 个数组进行排序
【发布时间】:2016-07-25 15:51:05
【问题描述】:

我有这种对“arr1”进行排序的冒泡排序算法。

static int yearAscDes(int value)`
    {
if (value == 0) 
{
            int[] arr1 = { 1930, 1931, 2016, 2014, 2012 };
            int temp1 = 0;

            for (int i1 = 0; i1 < arr1.Length; i1++)
            {
                for (int j1 = 0; j1 < arr1.Length - 1; j1++)
                {
                    if (arr1[j1] < arr1[j1 + 1])
                    {
                        temp1 = arr1[j1 + 1];
                        arr1[j1 + 1] = arr1[j1];
                        arr1[j1] = temp1;
                    }
                }
            }

            for (int i1 = 0; i1 < arr1.Length; i1++)
            {

                Console.Write(arr1[i1] + " \n");
            }
            return 0;
}

我想使用此算法对 3 个不同的数组进行排序,然后将它们相互比较。

例如

int[] arr1 = {1930, 1931, 2016, 2014, 2012};
string[] Months = {"Jan", "March", "Dec", "May", "Sept"};
int[] Num = {10, 5, 1, 3, 12};

如果我有这些数组并按升序对 arr1 进行排序,我希望结果如下所示:

结果:

arr1 月数

2016 年 12 月 1 日

2014 年 5 月 3 日

2012 年 9 月 12 日

1931 年 3 月 5 日

1930 年 1 月 10 日

【问题讨论】:

  • 为什么不只使用DateTime的1个数组?
  • 虽然@SamIam 说得非常正确,但如果你必须坚持使用这种数据结构,当你说arr1[j1 + 1] = arr1[j1]; 时,你能不能也添加Months[j1 + 1] = Months[j1];Num[j1 + 1] = Num[j1];作为存储另外两个温度值temp2 = Months[j1 + 1]temp3 = Num[j1 + 1]
  • 将日期分成 3 个数组对我来说似乎真的违反直觉。你可以省去那个巨大的排序功能,然后按照@SamIam 所说的去做。
  • 我确定这是一个作业,

标签: c# sorting bubble-sort


【解决方案1】:

如果你有兴趣让它对你的工作或副项目有用,我建议使用DateTime。它将包含您关心的所有内容以及更多内容。您也可以在数组中使用Sort().orderBy(..)


但是如果你对你的东西的实际实现感兴趣,为了练习,我们必须有几个假设。

  • 所有 3 个数组的大小相同
  • 您实际上只关心这些数组的初始索引,而不是实际对每个数组进行排序。这来自您的示例

因此,您应该使用二维数组,或 KeyValue 对数组。一个将是您的年份,另一个将保存初始索引。
然后,一旦完成对 Years 数组的排序,就可以查看 Years 值的初始索引,并从 Months 数组和 Days 数组中获取该索引的元素。

另一个想法: 您可以按原样保留 3 个数组,但是当您对 Years 数组的索引执行 swap 时,请交换其他两个数组。只需确保仅对 Years 数组中的 swam 使用检查条件。这样,在对 Years 数组进行排序时,您还将根据 Years 数组索引对其他两个数组进行排序。 你的代码:

if (arr1[j1] < arr1[j1 + 1])
{
    temp1 = arr1[j1 + 1];
    arr1[j1 + 1] = arr1[j1];
    arr1[j1] = temp1;
}

应该是这样的

if (arr1[j1] < arr1[j1 + 1])
{
    temp1 = arr1[j1 + 1];
    arr1[j1 + 1] = arr1[j1];
    arr1[j1] = temp1;

    tempMonths = months[j1 + 1]; 
    months[j1 + 1] = months[j1];
    months[j1] = tempMonths;

    tempDays = days[j1 + 1]; 
    days[j1 + 1] = days[j1];
    days[j1] = tempDays;
}

【讨论】:

    【解决方案2】:

    如果你能侥幸成功,你应该只使用 1 个 DateTime 数组

    DateTime[] dt = {new DateTime(1930, 1, 10), new DateTime(1931, 3, 5) /*...*/};
    

    如果你因为这是家庭作业而由于某种原因不能这样做,那么下一个最好的办法就是制作你自己的有一年、一个月和一天的课程,并包含一个方法来比较你。

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 2020-05-17
      • 1970-01-01
      • 2015-12-11
      • 2018-09-22
      • 2019-05-10
      • 2017-09-27
      • 2019-04-14
      • 2013-06-10
      相关资源
      最近更新 更多