-5

I'm new at Java. I'm studying through Programming Hub app. When i read HeapSort code i find out that method fnSortHeap not return array but main method still can print out it. From informations that i found in main method must be smt like that:

int arr2[];

arr2 = fnSortHeap(arr, i - 1);

and in fnSortHeap method must

return array;

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;
    }
}

1 Answers1

0

Java is pass-by-value. please refer java pass by value.

I think your question is how the main method able to print sorted array when the method fnSortHeapis actually not returning anything.

If this is the question, then the answer is in the above link. Anyways you are passing the array input and the method fnSortHeap is sorting the array the same array (not creating any duplicate), and the Main method is printing the same array.

Ran
  • 333
  • 1
  • 4
  • 16