堆排序講解(代碼簡潔)

來源:互聯網
上載者:User

標籤:font   swa   長度   父節點   int   style   數組   swap   --   

//本文適用於對堆排序部分理解的同學,主要體現的是代碼的簡潔.

 /*演算法思想(以大頂堆為例):
      1.將長度為n的待排序的數組進行堆有序化構造成一個大頂堆
      2.將根節點與尾節點交換並輸出此時的尾節點
      3.將剩餘的n -1個節點重新進行堆有序化
      4.重複步驟2,步驟3直至構造成一個有序序列*/

//堆排序
public class HeapSort {
    public static void heapSort(int arr[]){
        int size = arr.length;
        //初始化大根堆
        for (int i=0;i<arr.length;i++){
            heapInsert(arr,i);
        }
        swap(arr,0,--size);  //第一個元素和最後一個元素交換。
        while (size>0){      //剩下所有的,依次進行排序,每次確定一個位置。  
            heapify(arr,0,size);
            swap(arr,0,--size);
        }
    }
    //從後向前,確定資料元素的位置。
    public static void heapify(int arr[],int index,int size){
        int left = index*2+1; //設左孩子為left
        while (left<size){
            int largest = left+1<size&&arr[left]<arr[left+1]?left+1:left;  //左孩子和右孩子判斷,取大的
            largest = arr[index]>arr[largest]?index:largest;  //左右之中大的和父節點比較
            if (largest==index){   //如果父節點大,就說明原位置不變,此時返回即可。
                return;
            }
            swap(arr,largest,index);
            index = largest;
            left = index*2+1;  //層層判斷
        }

    }
    // 每插入一個元素,從建立立大根堆,用於初始化用。
    public static void heapInsert(int arr[],int index){

        while (arr[index]>arr[(index-1)/2]){
            swap(arr,index,(index-1)/2);
            index = (index-1)/2;
        }
    }
    // 設定一個交換。
    public static void swap(int arr[],int p,int q){
        int temp = arr[p];
        arr[p] = arr[q];
        arr[q] = temp;
    }
}

總結:理解了就很簡單。

堆排序講解(代碼簡潔)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.