Java 给定范围内的堆

Java 给定范围内的堆,java,algorithm,sorting,heap,heapsort,Java,Algorithm,Sorting,Heap,Heapsort,我试图编写一个Heapsort方法,该方法只在传递给该方法的给定范围内执行排序。传递范围low和high,这些值对应于堆内的值,而不是堆的索引。例如,输入数组可能是:28 10 49 20 59 61 17,如果low=49和high=61,则Heapsort之后的结果数组将如下所示:28 10 20 49 59 61 17。超出范围的值保持不变。我已经有了一个可用的Heapsort方法,但我的问题是如何修改这个方法以在一个通过的范围内排序 public static void heapSort

我试图编写一个Heapsort方法,该方法只在传递给该方法的给定范围内执行排序。传递范围low和high,这些值对应于堆内的值,而不是堆的索引。例如,输入数组可能是:28 10 49 20 59 61 17,如果low=49和high=61,则Heapsort之后的结果数组将如下所示:28 10 20 49 59 61 17。超出范围的值保持不变。我已经有了一个可用的Heapsort方法,但我的问题是如何修改这个方法以在一个通过的范围内排序

public static void heapSort(int[] array, int low, int high)
    {        
        // Build a maxHeap
        for(int i = array.length / 2; i >= 0; i--)
        {
            percolateDown(array, i, array.length);
        }

        // Heap sort
        for(int i = array.length - 1; i > 0; i--)
        {
            swap(array, 0, i);
            percolateDown(array, 0, i);
        }
    }
正如您所看到的,我的方法接受low和high,但目前不处理这些值。我尝试保留一个布尔标志,以确定算法何时在范围内,并仅在布尔值为真时进行排序。但这并不奏效。如果有人能帮助我,我将不胜感激


谢谢

您可以仅使用给定范围内的值创建新数组,然后仅使用heapsort新数组。然后替换原始数组的元素

你想要的不是分类。值41、59和61已在原始数组中排序。您需要的是重新排列数组,以便49和61之间的所有值都在一起。目前尚不清楚该集团的立场是什么。你的问题没有道理。例如,您说49到61范围之外的所有值保持不变,而20会改变其位置。如果将49、59和61的子序列与范围外的值隔离,则已对其进行排序。我的评论并不愚蠢。另一方面,你的回答。。。