数据结构与算法之堆排序
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法之堆排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據結構與算法之堆排序
目錄
1. 堆排序介紹
堆排序(Heapsort)是指利用堆((英語:heap)是計算機科學中一類特殊的數據結構的統稱。堆通常是一個可以被看做一棵樹的數組對象。)這種數據結構所設計的一種排序算法。堆積是一個近似完全二叉樹的結構,并同時滿足堆積的性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。堆排序可以說是一種利用堆的概念來排序的選擇排序。
分為兩種方法:
- 大頂堆:每個節點的值都大于或等于其子節點的值,在堆排序算法中用于升序排列;
- 小頂堆:每個節點的值都小于或等于其子節點的值,在堆排序算法中用于降序排列;
堆排序的平均時間復雜度為 Ο(nlogn),空間復制度是O(1),是不穩定排序算法。
2. 代碼實現
import java.util.Arrays;public class HeapSort {public static void heapSort(int[] arr) {if (arr == null || arr.length < 2)return;for (int i = 0; i < arr.length; i++)heapInsert(arr, i);int size = arr.length;swap(arr, 0, --size);while (size > 0) {heapify(arr, 0, size);//調整一次swap(arr, 0, --size);//換一個}}private static void heapify(int[] arr, int index, int size) {int left = index * 2 + 1;while (left < size) {int largest = left + 1 < size && arr[left + 1] > arr[left] ? left + 1 : left;largest = arr[largest] > arr[index] ? largest : index;if (largest == index)break;swap(arr, largest, index);index = largest;left = index * 2 + 1;}}private static void heapInsert(int[] arr, int index) {while (arr[index] > arr[(index - 1) / 2]) {swap(arr, index, (index - 1) / 2);index = (index - 1) / 2;}}private static void swap(int[] arr, int i, int i1) {int temp = arr[i];arr[i] = arr[i1];arr[i1] = temp;}public static void main(String[] args) {int[] arr = {6, 5, 1, 3, 4, 7};System.out.println(Arrays.toString(arr));heapSort(arr);System.out.println(Arrays.toString(arr));} }總結
以上是生活随笔為你收集整理的数据结构与算法之堆排序的全部內容,希望文章能夠幫你解決所遇到的問題。