【发布时间】:2018-04-26 04:00:16
【问题描述】:
我是 Java 新手。我正在通过 Programming Hub 应用程序学习。当我阅读 HeapSort 代码时,我发现 fnSortHeap 方法不返回数组,但 main 方法仍然可以打印出来。从我在 main 方法中找到的信息必须是这样的:
int arr2[];
arr2 = fnSortHeap(arr, i - 1);
并且在fnSortHeap方法中必须
返回数组;
class HeapSort
{
public static void main(String a[])
{
int i;
int arr[] = {1, 3, 4, 5, 2};
System.out.println("\nUnsorted Array\n---------------");
for (i = 0; i < arr.length; i++)
{
System.out.print(" " + arr[i]);
}
for (i = arr.length; i > 1; i--)
{
fnSortHeap(arr, i - 1);
}
System.out.println("\n\nSorted array\n---------------");
for (i = 0; i < arr.length; i++)
{
System.out.print(" " + arr[i]);
}
}
public static void fnSortHeap(int array[], int arr_ubound)
{
int i, o;
int lChild, rChild, mChild, root, temp;
root = (arr_ubound - 1) / 2;
for (o = root; o >= 0; o--)
{
for (i = root; i >= 0; i--)
{
lChild = (2 * i) + 1;
rChild = (2 * i) + 2;
if ((lChild <= arr_ubound) && (rChild <= arr_ubound))
{
if (array[rChild] >= array[lChild])
mChild = rChild;
else
mChild = lChild;
}
else
{
if (rChild > arr_ubound)
mChild = lChild;
else
mChild = rChild;
}
if (array[i] < array[mChild])
{
temp = array[i];
array[i] = array[mChild];
array[mChild] = temp;
}
}
}
temp = array[0];
array[0] = array[arr_ubound];
array[arr_ubound] = temp;
return;
}
}
【问题讨论】:
-
你的问题是什么?
-
fnSortHeap方法直接使用给定的arr参数进行处理。其实你的arr在每次调用方法时都被改变了