C# 使用冒泡排序对 3 个数组进行排序
C# Sort 3 arrays with Bubble sort
我有这个冒泡排序算法可以排序 "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 日
如果你能摆脱它,你应该只使用 1 个 DateTime
数组
DateTime[] dt = {new DateTime(1930, 1, 10), new DateTime(1931, 3, 5) /*...*/};
如果你因为某种原因不能这样做,因为这是家庭作业,那么下一个最好的办法就是制作你自己的 class 有年、月、日,并包括一种为您进行比较的方法。
如果您有兴趣将其用于您的工作或业余项目,我建议您使用 DateTime
。它可以装下您关心的所有物品以及更多物品。您也可以在数组中使用 Sort()
或 .orderBy(..)
。
但是如果你对你的东西的实际实现感兴趣,为了练习,我们必须有几个假设。
- 所有 3 个数组的大小相同
- 您实际上只关心那些数组的初始索引,而不是实际对每个数组进行排序。这源自您的示例
因此,您应该使用二维数组,或键值对数组。一个将是您的年份,另一个将包含初始索引。
然后,一旦完成对年数组的排序,就可以查看年值的初始索引,并从月数组和天数组中获取该索引的元素。
另一个想法:
您可以按原样保留 3 个数组,但是当您对 Years 数组的索引执行 swap
时,请交换其他两个数组。只需确保您只对 Years 数组中的游泳使用检查条件。这样,当对 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;
}
我有这个冒泡排序算法可以排序 "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 日
如果你能摆脱它,你应该只使用 1 个 DateTime
DateTime[] dt = {new DateTime(1930, 1, 10), new DateTime(1931, 3, 5) /*...*/};
如果你因为某种原因不能这样做,因为这是家庭作业,那么下一个最好的办法就是制作你自己的 class 有年、月、日,并包括一种为您进行比较的方法。
如果您有兴趣将其用于您的工作或业余项目,我建议您使用 DateTime
。它可以装下您关心的所有物品以及更多物品。您也可以在数组中使用 Sort()
或 .orderBy(..)
。
但是如果你对你的东西的实际实现感兴趣,为了练习,我们必须有几个假设。
- 所有 3 个数组的大小相同
- 您实际上只关心那些数组的初始索引,而不是实际对每个数组进行排序。这源自您的示例
因此,您应该使用二维数组,或键值对数组。一个将是您的年份,另一个将包含初始索引。
然后,一旦完成对年数组的排序,就可以查看年值的初始索引,并从月数组和天数组中获取该索引的元素。
另一个想法:
您可以按原样保留 3 个数组,但是当您对 Years 数组的索引执行 swap
时,请交换其他两个数组。只需确保您只对 Years 数组中的游泳使用检查条件。这样,当对 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;
}