陕西省建设执业中心网站,免费建立网站的平台,大型游戏门户网站织梦模板,一起买买买网站建设本期讲解堆排序的实现 ——————————————————————
1. 堆排序
堆排序即利用堆的思想来进行排序#xff0c;总共分为两个步骤#xff1a; 1. 建堆 • 升序#xff1a;建大堆 • 降序#xff1a;建小堆 2. 利用堆删除思想来进行排序.
建堆和堆删… 本期讲解堆排序的实现 ——————————————————————
1. 堆排序
堆排序即利用堆的思想来进行排序总共分为两个步骤 1. 建堆 • 升序建大堆 • 降序建小堆 2. 利用堆删除思想来进行排序.
建堆和堆删除中都用到了向下调整因此掌握了向下调整就可以完成堆排序。
PS: 向下调整的代码实现已在上一篇博客最后Heap.c 分享 堆排序的两种实现
在此我们提倡第二种堆排序的方法
1. int a[]{2,5,7,4,1,6,9,8,3};void HeapSort(int* a,int n)
{Heap heap;HeapInitArray(heap, a, n);//建立了小堆//排序int i 0;while (!HeapEmpty(heap)){a[i] HeapTop(heap);printf(%d\n,a[i]);i;//为了打印HeapPop(heap);}HeapDestroy(heap);
}
缺点 1.空间复杂度为ON 2.需要去写堆的数据结构子函数太麻烦。
2.
//找降序建小堆
void HeapSort(HeapDataType* a ,int n)
{//1.原数组建小堆时间复杂度ONfor (int i (n - 1 - 1) / 2; i 0; i--){AdjustDown(a,n,i);//参数目的地个数开始调整的位置parent}//2.交换继续使用向下调整, 时间复杂度O(N*logN)int end n - 1;while (end 0){Swap(a[0],a[end]);AdjustDown(a,end,0);--end;}
} 堆排序的时间复杂度为o(N*logN) 这个博客如果对你有帮助给博主一个免费的点赞就是最大的帮助❤
欢迎各位点赞收藏和关注哦❤
如果有疑问或有不同见解欢迎在评论区留言哦❤
后续我会一直分享双一流211西北大学软件C数据结构CLinuxMySQL的学习干货以及重要代码的分享