java面試 演算法篇之堆排序

2021-08-02 11:42:26 字數 1563 閱讀 2848

一、堆的概念

堆是一棵順序儲存的完全二叉樹。完全二叉樹中所有非終端節點的值均不大於(或不小於)其左、右孩子節點的值。

其中每個節點的值小於等於其左、右孩子的值,這樣的堆稱為小根堆;

其中每個節點的值大於等於其左、右孩子的值,這樣的堆稱為大根堆;

二、要點

1.將陣列構造成初始堆(若想公升序則建立大根堆,若想降序,則建立小根堆)

從最後乙個節點開始調整,得到初始堆。

2.堆排序處理

交換堆頂的元素和最後乙個元素,此時最後乙個位置作為有序區(有序區顯示為黃色),然後進行其他無序區的堆調整,重新得到大頂堆後,交換堆頂和倒數第二個元素的位置……

重複此過程:

最後,有序擴充套件完成即排序完成:

核心**

public void heapadjust(int array, int parent, int length) 

// 如果父結點的值已經大於孩子結點的值,則直接結束

if (temp >= array[child])

break;

// 把孩子結點的值賦給父結點

array[parent] = array[child];

// 選取孩子結點的左孩子結點,繼續向下篩選

parent = child;

child = 2 * child + 1;

}array[parent] = temp;}

public void heapsort(int list)

// 進行n-1次迴圈,完成排序

for (int i = list.length - 1; i > 0; i--)

}

演算法分析排序類別排序方法時間複雜度

空間複雜度

穩定性

複雜性

平均情況

最壞情況

最好情況

選擇排序

堆排序o(nlog2n)

o(nlog2n)

o(nlog2n)

o(1)

不穩定較複雜

java面試演算法之快速排序

created by luo on 2017 9 2.public class quicksort int partition partition arr,first,last 獲取基準值所在陣列的位置,並對左右進行大小區分 quicksort arr,first,partition quickso...

面試演算法 排序

0.演算法時間複雜度 演算法的時間複雜度和空間複雜度 總結 1.快速排序 白話經典演算法系列之六 快速排序 快速搞定 快速排序最好,最壞,平均複雜度分析 2.歸併排序 白話經典演算法系列之五 歸併排序的實現 blog.csdn.net morewindows article details 6678...

排序演算法篇(堆排序)

堆是一種特殊的資料結構,是一種完全二叉樹,分為大根堆 根節點的值大於孩子節點 和小根堆 根節點小於孩子節點 建堆和堆排序 如下 package cn.com.daydayup.test public class stacksort sort a 堆排需方法 public static void so...