龙空技术网

Java十大排序算法之堆排序

intellijidea 140

前言:

当前兄弟们对“堆可以实现排序算法”都比较注意,小伙伴们都需要剖析一些“堆可以实现排序算法”的相关知识。那么小编在网络上汇集了一些关于“堆可以实现排序算法””的相关知识,希望各位老铁们能喜欢,小伙伴们一起来了解一下吧!

1、概念

堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。

2、基本思想

创建一个堆 H[0……n-1];把堆首(最大值)和堆尾互换;把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;重复步骤 2,直到堆的尺寸为 1。

3、代码实现

public static void heapsort(int[] a)    {        int len = a.length;        //构建堆        for(int i = len / 2 - 1;i >= 0 ;i-- )        {            heapadjust(a,i,len - 1);        }        for(int j=len -1;j>0;j--)        {            int temp = a[0];            a[0] = a[j];            a[j] = temp;            heapadjust(a,0,j-1);        }    }        public static void heapadjust(int[] a,int pos,int len)    {        int child = 2 * pos + 1;        int tmp = a[pos];        while(child <= len)        {            if(child <len && a[child] < a[child + 1])            {                child ++;            }            if(a[child] >tmp)            {                a[pos] = a[child];                pos = child;                child = 2*pos + 1;            }            else             {                break;            }        }        a[pos] = tmp;    }        public static void main(String[] args) {        int[] array ={3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};        for(int i : array)        {            System.out.print(i + " ");        }        heapsort(array);        System.out.println();        for(int i = 0;i<array.length;i++)        {            System.out.print(array[i] + " " );        }    }

标签: #堆可以实现排序算法