美文网首页
算法_堆排序

算法_堆排序

作者: 左上偏右 | 来源:发表于2017-01-08 13:32 被阅读11次
//堆排序
public class HeapSort {   //(1)
        public static void main(String[] args) {
            HeapSort heapSort = new HeapSort();
            int[] array = { 19, 8, 27, 6, 35, 14, 3, 12, 1, 0, 9, 10, 7 };

            System.out.println("Before heap:");
            heapSort.printArray(array);

            heapSort.heapSort(array);

            System.out.println("After heap sort:");
            heapSort.printArray(array);
        }

        public void heapSort(int[] array) {
            if (array == null || array.length <= 1) {
                return;
            }
            buildMaxHeap(array);//建立最大堆
            for (int i = array.length - 1; i >= 1; i--) {
                //最大的在0位置,那么开始沉降,这样每交换一次最大的值就丢到最后了
                exchangeElements(array, 0, i);
                //继续获取0位置最大值
                maxHeap(array, i, 0);
            }
        }

        //(2)       //建立最大堆
        private void buildMaxHeap(int[] array) {
            if (array == null || array.length <= 1) {
                return;
            }
            int half = (array.length-1) / 2;
            for (int i = half; i >= 0; i--) {
                maxHeap(array, array.length, i);
            }
        }

        private void maxHeap(int[] array, int heapSize, int index) {
            int left = index * 2 + 1;
            int right = index * 2 + 2;
            int largest = index;
            if (left < heapSize && array[left] > array[index]) {
                largest = left;
            }
            if (right < heapSize && array[right] > array[largest]) {
                largest = right;
            }
            if (index != largest) {
                exchangeElements(array, index, largest);

                maxHeap(array, heapSize, largest);
            }
        }
        
//(3)       
        public void printArray(int[] array) {  
            System.out.print("{");  
            for (int i = 0; i < array.length; i++) {  
                System.out.print(array[i]);  
                if (i < array.length - 1) {  
                    System.out.print(", ");  
                }  
            }  
            System.out.println("}");  
        }  
        
        
        public void exchangeElements(int[] array, int index1, int index2) {  
            int temp = array[index1];  
            array[index1] = array[index2];  
            array[index2] = temp;  
        }  
    }

相关文章

  • iOS算法总结-堆排序

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

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 堆排序算法思想

    前两天看了看堆排序算法,啃了半天的书,最后搞明白了堆排序算法,今天有时间给大家说说这个堆排序算法。首先讲一下算法的...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 堆排序

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

  • 常用排序算法之堆排序

    堆排序算法 运行 输出

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

  • 数据结构

    Q:堆排序 A:1 堆排序算法(图解详细流程)2 堆排序 Q:排序算法时间复杂度与稳定性 选择排序为什么不稳定:举...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 排序算法(六)堆排序

    排序算法(六 )堆排序 1.算法思路  堆排序(Heap-Sort)是一种基于二叉堆的排序算法。即将一个无序序列构...

网友评论

      本文标题:算法_堆排序

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