8 排序演算法 堆排序

2021-10-10 21:21:41 字數 1420 閱讀 7585

堆排序(heapsort)是指利用堆這種資料結構所設計的一種排序演算法。堆積是乙個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:

堆排序的平均時間複雜度為 ο(nlogn)。

1. 演算法步驟

建立乙個堆 h[0……n-1];

把堆首(最大值)和堆尾互換;

把堆的尺寸縮小 1,並呼叫 shift_down(0),目的是把新的陣列頂端資料調整到相應位置;

重複步驟 2,直到堆的尺寸為 1。

2.**演示

**實現

package com.data.algorithm;

/** * 堆排序演示

* 時間複雜度:nlgn

* @author dzc

*/public class heapsortdemo ;

int arr = ;

heapsort(arr);

for (int i : arr)

}/**

* 建立堆,

* @param arr 待排序列

*/private static void heapsort(int arr)

//調整堆結構+交換堆頂元素與末尾元素

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

}/**

* 調整堆

* @param arr 待排序列

* @param parent 父節點

* @param length 待排序列尾元素索引

*/private static void adjustheap(int arr, int parent, int length)

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

if (temp >= arr[lchild])

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

arr[parent] = arr[lchild];

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

parent = lchild;

lchild = 2 * lchild + 1;

}arr[parent] = temp;}}

007 排序演算法 堆排序

一 概述 堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。排序方法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性堆排序 o nlogn o...

8 排序演算法

1 氣泡排序 bubble sort 演算法描述 比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數 針對所有的元素重複以上的步驟,除了最後乙個 重複步驟1 3,直到排序完成。實現 public clas...

JS演算法4 排序 堆排序

堆 是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。堆排序 是指利用堆這種資料結構所設計的一種排序演算法 heapinsert arr,index 增大堆結構 先建立大根堆,這是乙個往上走的過程,進來的元素與父元素比,大了就往上走,此時陣列仍為無...