gpt4 book ai didi

java - 插入排序,4 维数组 Java

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:18 26 4
gpt4 key购买 nike

作为作业的一部分,我应该编写一个方法,该方法使用插入排序根据每个 3D 数组内的 double 数量对 4D 数组内的 3D 数组进行排序。

到目前为止,我已经有了这个方法,但它似乎只有在最小的 3D 数组不在最后一个位置时才有效(four[2],其中 four 是一个包含 3 个元素的 4D 数组)。

public static void sort4DArray(double[][][][] list) {
int x;
for (int i = 1; i < list.length; i++) {
double[][][] currentElement = list[i];
//shifts the 3D arrays
for (x = i - 1; x >= 0 && count(list,x) > count(list,i); x--) {
list[x + 1] = list[x];
}
//inserts the 3D array to its new position
list[x + 1] = currentElement;
}
}

请注意,在此方法中,我使用另一种方法“count”来计算给定 3D 数组内有多少个 double 。我将留下以下代码以供引用:

public static int count(double[][][][] list, int x) {
int count = 0;
for (int j=0; j < list[x].length; j++) {
for (int k=0; k < list[x][j].length; k++){
count += list[x][j][k].length;
}
}
return count;
}

这里有两个示例输出,第一个是正确的,第二个是错误的:数组以括号格式打印,希望很容易理解。

数组中的数组是随机长度的(参差不齐),并且其中的 double 也是随机生成的。

{
{
{{0.5, 3.6, 8.9, }}
{{26.7, 20.5, 4.7, }}
{{15.3, }}
},
{
{{25.5, }}
},
{
{{15.8, 5.8, 0.2, }{12.7, }}
{{25.8, }}
},
}

After Sort:
{
{
{{25.5, }}
},
{
{{0.2, 5.8, 15.8, }{12.7, }}
{{25.8, }}
},
{
{{0.5, 3.6, 8.9, }}
{{4.7, 20.5, 26.7, }}
{{15.3, }}
},
}

这是第二个输出。请注意,最小的 3D 数组位于第一个打印的最后:

{
{
{{22.4, }{29.8, }{5.5, }}
{{10.2, 6.4, }}
},
{
{{13.4, }{24.0, }{3.5, 6.0, }}
{{14.1, 8.5, }{5.6, 14.3, }{22.1, }}
},
{
{{20.1, }}
},
}

After Sort:
{
{
{{22.4, }{29.8, }{5.5, }}
{{6.4, 10.2, }}
},
{
{{20.1, }}
},
{
{{13.4, }{24.0, }{3.5, 6.0, }}
{{8.5, 14.1, }{5.6, 14.3, }{22.1, }}
},
}

最佳答案

首先,我将简化您的 count() 函数以减少一个维度:

public static int count(double[][][] list) {
int count = 0;
for (int j=0; j < list.length; j++) {
for (int k=0; k < list[j].length; k++){
count += list[j][k].length;
}
}
return count;
}

这样,我们会将您对 count(list, x) 的旧调用替换为对 count(list[x]) 的新调用。

对于插入排序,解决方法很简单:将 count(list[x]) > count(list[i]) 更改为 count(list[x]) > count(currentElement)。这是因为 list[i] 在您定义的内部循环的第一次迭代时被 list[x + 1] = list[x] 逻辑覆盖。 (注意:我已经用数百万个随机测试用例验证了这个固定算法。)

关于java - 插入排序,4 维数组 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29992482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com