堆排序

作者: 海是倒过来的天_67f2 | 来源:发表于2019-08-12 22:55 被阅读0次

public class HeapSort {

    public static void main(String []args){

        int [] arr = {20,50,20,40,70,10,80,30,60};

        heapSort(arr);

        System.out.println(Arrays.toString(arr));

    }

    private static void heapSort(int[] arr) {

        if (arr == null || arr.length<2){

            return;

        }

        //构建大顶堆

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

            adjustHead(arr,i,arr.length);

        }

        //交换顶部文件并调整堆结构

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

            adjustHead(arr,0,j);

            swap(arr,0,j);

        }

    }

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

        int temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

    }

    private static void adjustHead(int[] arr, int i, int length) {

        int temp = arr[i];

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

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

                j++;

            }

            if (arr[j]>temp){

                arr[i] = arr[j];

                i = j;

            } else {

                break;

            }

        }

        arr[i] = temp;

    }

//    private static void heapSort(int[] arr) {

//

//        //构建大顶堆

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

//            adjustHeap(arr,i,arr.length);

//        }

//        //交换堆顶元素与末尾元素,调整堆结构

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

//            swap(arr, 0,j);

//            adjustHeap(arr,0,j);

//        }

//    }

//

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

//        int temp = arr[i];

//        arr[i]= arr[j];

//        arr[j]=temp;

//    }

//

//    private 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;

//

//        int temp = arr[i];

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

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

//                j++;

//            }

//            if (arr[j]>temp){

//                arr[i] = arr[j];

//                i = j;

//            } else {

//                break;

//            }

//        }

//        arr[i]= temp;

//    }

}

相关文章

  • 堆排序

    目录 1.堆排序介绍 2.堆排序图文说明 3.堆排序的时间复杂度和稳定性 4.堆排序实现 堆排序介绍 堆排序(He...

  • 堆排序---基础篇

    本文主要介绍堆排序的一些基本过程和分析。 大纲 堆排序简介 堆排序代码实现 1. 堆排序简介 1.1 堆排序的存储...

  • 堆和堆排序

    最小K个数 堆排序 堆排序

  • JS实现堆排序

    原理 堆排序原理 实现 说明 堆排序对大文件很有效 堆排序是不稳定排序

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序

    原创 堆排序: 使用visit数组从本质出发获取大顶堆排序。

  • 堆排序

    堆排序

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

网友评论

      本文标题:堆排序

      本文链接:https://www.haomeiwen.com/subject/hdfmjctx.html