日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构与算法之堆排序

發布時間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法之堆排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據結構與算法之堆排序


目錄

  • 堆排序介紹
  • 代碼實現

  • 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));} }

    總結

    以上是生活随笔為你收集整理的数据结构与算法之堆排序的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。