前言
为什么要单独写排序算法这一系列,看过一些贴子普遍篇幅较长。看完还依旧云里雾里,难以直观理解原理及整个过程。代码永远是基于理解的基础上才能实现。
执行过程能动画展示需方便清晰,同时需具备单步调试,方便没理解的可以回看。
语言比较推荐c语言,高级语言库函数较多,人都有惰性思维,将自己置身于环境中训练也是至关重要。
每日佳句鼓励:心若安定,万事从容。
实现原理
以下是堆排序的基本步骤:
-
创建堆:将给定无序序列构造成一个大顶堆(或小顶堆)。
-
堆排序:将堆顶元素与堆的最后一个元素进行交换,然后重新调整结构,使其仍然保持堆的性质,然后再进行交换,直到堆中只剩下一个元素。
动画展示过程
具体代码实现
#include <stdio.h>
void swap(int* a,int* b){
int tmp=*a;
*a=*b;
*b=tmp;
}
void heapify(int arr[],int len,int i){
int largest=i;
int l=2*i+1;
int r=2*i+2;
if(l<l