堆+建堆、插入、刪除、排序+java實現

來源:互聯網
上載者:User

標籤:void   print   class   迴圈   turn   util   str   實現   std   

package testpackage;import java.util.Arrays;public class Heap {        //建立大頂堆        public static void buildMaxHeap(int[] a) {            for(int i=(a.length/2)-1;i>=0;i--) {                adjustDown(a,i,a.length);            }        }        //向下調整        public static void adjustDown(int[] a,int i,int len) {            int temp,j;            temp=a[i];            for(j=2*i+1;j<len;j=2*j+1) {       //j為當前i的子節點,預設為左節點                if(j+1<len&&a[j+1]>a[j])       //如果右節點大,則選右節點                    j++;                if(a[j]<=temp)                 //若子節點都比初始值temp小,說明找到了位置                    break;                else {                                               a[i]=a[j];                   //如果沒有終止,那麼將子節點中數值大的上調至i處                        i=j;                       //同時i下降到j這個位置                }            }            a[i]=temp;                           //將temp放在最終的位置        }        //堆排序        public static void heapSort(int[] a) {            buildMaxHeap(a);            for(int i=a.length-1;i>=0;i--) {                int temp=a[0];                a[0]=a[i];                a[i]=temp;                adjustDown(a,0,i);  //將剩餘len-1調整為大頂堆,迴圈,所以用i表示            }        }        //向上浮動        public static void adjustUp(int[] a,int i) {            int temp,j;            temp=a[i];            j=(i-1)/2;            while(j>=0&&a[j]<temp) {                a[i]=a[j];                i=j;                j=(j-1)/2;            }            a[i]=temp;        }        //插入        public static int[] insert(int[] a,int num) {            int[] b=new int[a.length+1];            int i,j;            i=0;            j=0;            while(i<a.length) b[j++]=a[i++];            b[a.length]=num;            adjustUp(b,a.length);            return b;        }        //刪除(刪除時有規則的,堆頂元素才會被刪除)        public static int[] delete(int[] a) {            int temp=a[0];            a[0]=a[a.length-1];            a[a.length-1]=temp;            adjustDown(a,0,a.length-1);            int[] b=new int[a.length-1];            int i,j;            i=j=0;            while(i<a.length-1) b[j++]=a[i++];            return b;                    }        public static void main(String[] args) {            int[] a= {5,88,45,37,91,26,13,66,50};            buildMaxHeap(a);       //建堆            System.out.println(Arrays.toString(a));            a=insert(a,77);           //插入            System.out.println(Arrays.toString(a));            a=delete(a);           //刪除,只能刪除堆頂元素            System.out.println(Arrays.toString(a));            heapSort(a);          //排序            System.out.println(Arrays.toString(a));        }}

 

堆+建堆、插入、刪除、排序+java實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.