博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法—堆排序
阅读量:2229 次
发布时间:2019-05-09

本文共 1132 字,大约阅读时间需要 3 分钟。

1.堆排序的算法思想

  • 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是 通过堆来进行选择数据。

2.简单总结下堆排序的基本思路:

a.将无序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆(注意:实现升序需要建大堆,实现降序需要建小堆);

b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;

c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。

  • 以升序为例基本代码实现如下:
void AdjustDown(int* arr,int root,int count){
int parent = root; int child = parent * 2 + 1; while (child <= count - 1) {
//向下调整算法有一个前提:左右子树必须是一个堆,才能调整。 if (child +1 <= count -1 && arr[child + 1] > arr[child])//注意:child +1 <= count -1 {
child++; } //选出较大的那个孩子 if (arr[child] > arr[parent]) {
swap(arr[child], arr[parent]); parent = child; child = parent * 2 + 1; }//如果孩子大于父亲,则交换 else {
break; } }}void HeapSort(int* arr, int count){
//排序之前先建堆,升序要建大堆 for (int i = (count - 1 - 1) / 2; i >= 0; i--) {
AdjustDown(arr, i, count); } int num = count - 1; while (num) {
swap(arr[0], arr[num]); AdjustDown(arr, 0, num); --num; }}

2.快速排序的特性总结

  • 时间复杂度分析

    ①:最优情况下时间复杂度:O( nlogn ).

    ②:最差情况下时间复杂度:O( nlogn ).

  • 空间复杂度分析

    堆排序空间复杂度为:O( 1 ).

  • 稳定性分析

    堆排序是一种不稳定的排序。

3.堆排序详细图解

  • 最后分享一个我在其他博客上看到的堆排序的详细图解的链接:https://www.cnblogs.com/chengxiao/p/6129630.html
你可能感兴趣的文章
【LEETCODE】225-Implement Stack using Queues
查看>>
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
【LEETCODE】190-Reverse Bits
查看>>
【LEETCODE】67-Add Binary
查看>>
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>