21xrx.com
2024-11-26 00:05:59 Tuesday
登录
文章检索 我的文章 写文章
Java堆排序法实现及输出过程解析
2023-06-19 13:09:52 深夜i     --     --
Java堆排序 最大堆 交换和下调

Java中堆排序算法常用于对大规模数据进行排序。其思路是先将数据转化为最大/最小堆,然后将堆顶元素与堆底元素交换,并下调堆顶元素。重复此操作,直到堆空。

下面给出Java堆排序法的具体实现,以及输出每趟结果的代码案例:


public class HeapSort {

  public static void main(String[] args) {

    int[] arr = 13;

    heapSort(arr);

    for(int i=0;i

      System.out.print(arr[i]+" ");

    }

  }

  // 堆排序算法的实现

  public static void heapSort(int[] arr) {

    // 将待排序数组转化为最大堆(从最后一个非叶子节点开始下调)

    for (int i = arr.length / 2 - 1; i >= 0; i--) {

      adjustHeap(arr, i, arr.length);

    }

    // 交换堆顶元素和堆底元素,并下调堆顶元素

    for (int i = arr.length - 1; i > 0; i--) {

      swap(arr, 0, i);

      adjustHeap(arr, 0, i);

      // 每趟排序输出结果

      System.out.print("第"+(arr.length-i)+"趟排序结果:");

      for(int j=0;j

        System.out.print(arr[j]+" ");

      }

      System.out.println();

    }

  }

  // 调整堆

  public static void adjustHeap(int[] arr, int i, int length) {

    int temp = arr[i];

    for (int k = i * 2 + 1; k < length; k = k * 2 + 1) {

      if (k + 1 < length && arr[k] < arr[k + 1]) {

        k++;

      }

      if (arr[k] > temp) {

        arr[i] = arr[k];

        i = k;

      } else {

        break;

      }

    }

    arr[i] = temp;

  }

  // 交换数组中的两个元素

  public static void swap(int[] arr, int i, int j) {

    int temp = arr[i];

    arr[i] = arr[j];

    arr[j] = temp;

  }

}

上述代码中,我们定义了一个heapSort方法,用于实现堆排序算法。该方法先将待排序数组转化为最大堆,然后进行交换和下调,最终得到有序数组。用for循环实现每趟排序结果输出。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复