zoukankan      html  css  js  c++  java
  • java数据结构-排序算法-堆算法

    package com.kuang;

    import java.util.Arrays;

    /**
    * @auther 付强
    * @date 2020/2/19 - 10:50
    */
    public class HeapSort {
    public static void main(String[] args) {
    int[] arr=new int[]{9,6,8,10,0,7,6,4,2};
    //开始位置是最后一个非叶子几点,即最后节点的父节点
    int start=(arr.length-1)/2;
    //结束位置是数组的长度减一,循环调整成一个大顶堆
    for(int i=start;i>=0;i--){
    maxHeap(arr,arr.length,i);
    }
    //先把数组中的第0个和堆中的最后一个数交换位置,再把前边的处理成大顶堆
    for(int i=arr.length-1;i>0;i--){
    int temp=arr[0];
    arr[0]=arr[i];
    arr[i]=temp;
    maxHeap(arr,i,0);
    }
    System.out.println(Arrays.toString(arr));
    }
    //size是你要调多少,index表示你要调哪个
    public static void maxHeap(int[] arr,int size,int index){
    //通过index找到当前节点的左子节点
    int leftNode=2*index+1;
    //通过index找到当前节点的右子节点
    int rightNode=2*index+2;
    //和两个子节点分别进行对比,找出最大的
    int max=index;
    if(leftNode<size&&arr[leftNode]>arr[max]){
    max=leftNode;
    }
    if(rightNode<size&&arr[rightNode]>arr[max]){
    max=rightNode;
    }
    //交换位置
    if(max!=index){
    int temp=arr[max];
    arr[max]=arr[index];
    arr[index]=temp;
    //交换位置以后,可能会破坏之前排好的堆,所以,之前排好的堆需要重新调整
    maxHeap(arr,size,max);
    }
    }
    }
  • 相关阅读:
    jsp 内置对象二
    jsp 内置对象(一)
    jsp04状态管理
    jsp03( javabeans)
    jsp05 指令与动作
    Maven搭建SpringMVC + SpringJDBC项目详解
    java 面向对象
    java 面向对象 2
    javaScript 进阶篇
    NSSet、NSMutableSet、NSOrderedSet、NSMutableOrderedSet
  • 原文地址:https://www.cnblogs.com/fuqiang-java/p/12330432.html
Copyright © 2011-2022 走看看