当前位置: 首页 > 知识库问答 >
问题:

给定范围内的堆

陶飞英
2023-03-14

我正在尝试编写一个Heap排序方法,它只在传入方法的给定范围内执行排序。传入的范围是低和高,这些值对应于堆中的值,而不是堆的索引。例如,输入数组可能是:28 10 49 20 59 61 17,如果low=49,high=61,Heap排序后的结果数组将看起来像这样:28 10 20 49 59 61 17。范围之外的值保持不变。我已经有了一个工作的Heap排序方法,但我的问题是如何修改这个方法以在传入的范围内排序?

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,但目前不使用这些值。我曾尝试保留一个布尔标志,以确定算法何时在范围内,并仅在布尔值为真时进行排序。但这并不奏效。如果有人能帮助我,我将不胜感激。

谢谢!

共有2个答案

徐安康
2023-03-14
public static void main( String [ ] args ) {
        Integer[] arr = {9, 8, 7, 6, 5, 4, 3, 2, 1};
        heapsort(arr, 0, 4);
}

/**
 * Standard heapsort.
 * @param a an array of Comparable items.
 */
public static <AnyType extends Comparable<? super AnyType>> void heapsort(AnyType [ ] a, int low, int high) {
    for (int i = high / 2; i >= low; i--)  /* buildHeap */
        percDown( a, i, high);
    for (int i = high; i > low; i--) {
        swapReferences(a, low, i);         /* deleteMax */
        percDown(a, low, i);
    }
    System.out.println(Arrays.toString(a));
}
东门晓博
2023-03-14

您可以创建新的数组,只使用给定范围内的值,然后只对新数组进行堆排序。然后替换原始数组的元素。

 类似资料:
  • 本文向大家介绍Java 生成给定范围内的随机数,包括了Java 生成给定范围内的随机数的使用技巧和注意事项,需要的朋友参考一下 为了生成给定范围内的随机数,Java代码如下- 示例 输出结果 名为Demo的类包含主要功能。在这里,将创建一个新的随机实例以及一个新的数组列表。创建随机元素并将其分配给变量。使用add函数将这些随机变量添加到列表中。这些元素显示在控制台上。

  • 假设您有一个间隔列表,例如[(0 4),(1 3),(2 5),(2 6)]。此列表未排序。然后给您一个范围,如[1 5]。您必须返回适合范围内的间隔数。在这个问题中,它将返回2。((1 3)和(2 5)) 间隔列表保持不变,但我们最多得到100000个查询,每个查询由一个范围组成。对于每个范围查询,我们必须返回适合其中的间隔数。 在研究之后,我读到了间隔树。但是,您只能查询与任何给定范围重叠的间

  • 基本上,我有一个基于php/mysql的系统和一个包含LAT/LNG中一组点的表。 在另一端,我有一个带有谷歌地图的iOS应用程序,当相机位置改变时,我会提交用户正在观察的当前区域的上/左、下/右点(这是我需要的,我不需要地图的可视点)。 我需要能够找到这些点的一个特定子集,给出一个边界“框”--地球上的一个矩形区域--有一个上/左,下/右点。 这是可行的-没有问题。 但是当地图被自由旋转时-事情

  • 本文向大家介绍C#生成给定范围内的随机整数,包括了C#生成给定范围内的随机整数的使用技巧和注意事项,需要的朋友参考一下 示例 生成一个介于minValue和之间的随机数maxValue - 1。            

  • 我有N个数字,让我们说。现在我想找出在给定范围内有多少对数字。(L和R给定)。数字对=两个数字相同。我的方法:

  • 问题内容: 我想知道如何在给定父范围的情况下获取所有子范围的列表。我可以从该范围的属性中找到$ childHead,$ childTail,$ nextSibling和$$ prevSibling。 我现在使用的方法是从父级获取childHead,然后使用nextSibling获取下一个孩子,直到nextSibling为空。 有没有更好的方法?鉴于我想在所有子项上调用方法[getModel],是否