Java十大排序算法之堆排序

Java (44) 2023-12-18 08:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Java十大排序算法之堆排序,希望能够帮助你!!!。

1、概念

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

2、基本思想

  1. 创建一个堆 H[0……n-1];
  2. 把堆首(最大值)和堆尾互换;
  3. 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;
  4. 重复步骤 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] + " " );
        }
    }

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

发表回复