咸阳学校网站建设哪家好,太湖网站建设,嘉兴网络推广,网络推广app是做什么工作追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~#x1f60e; 前言#x1f64c;堆的应用 —— 堆排序算法#xff1a;堆排序算法源代码分享运行结果测试截图#xff1a; 总结撒花#x1f49e; #x1f60e;博客昵称#xff1a;博客小梦 #x1f60… 追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序 ~ 前言堆的应用 —— 堆排序算法堆排序算法源代码分享运行结果测试截图 总结撒花 博客昵称博客小梦 最喜欢的座右铭全神贯注的上吧 作者简介一名热爱C/C算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主 博主小留言哈喽各位CSDN的uu们我是你的博客好友小梦希望我的文章可以给您带来一定的帮助话不多说文章推上欢迎大家在评论区唠嗑指正觉得好的话别忘了一键三连哦 前言 哈喽各位友友们我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下我仅已此文手把手带领大家追梦之旅【数据结构篇】——看看小白试如何利用C语言“痛”撕堆排序~ 都是精华内容可不要错过哟 堆的应用 —— 堆排序算法
堆排序即利用堆的思想来进行排序总共分为两个步骤
建堆 升序建大堆 降序建小堆利用堆删除思想来进行排序建堆和堆删除中都用到了向下调整因此掌握了向下调整就可以完成堆排序。
利用向上调整建堆的时间复杂度O(n*logn);利用向下调整建堆的时间复杂度O(n); 因此在堆排序中应用向下调整算法要优于向上调整算法。所有结点的排序调整部分也是O(n*logn).
最优的堆排序为 O(n n*logn)。
堆排序算法源代码分享 #includestdio.h
void Swap(int* p1, int* p2)
{int tem *p1;*p1 *p2;*p2 tem;
}//建小堆
//void AdjustDown(int* a, int size, int parent)
//{
// int child parent * 2 1;
// while (child size)
// {
// if (child 1 size a[child 1] a[child])
// {
// child;
// }
//
// if (a[child] a[parent])
// {
// Swap((a[parent]), (a[child]));
// parent child;
// child parent * 2 1;
// }
// else
// {
// break;
// }
// }
//}
//建大堆
void AdjustDown(int* a, int size, int parent)
{int child parent * 2 1;while (child size){if (child 1 size a[child 1] a[child]){child;}if (a[child] a[parent]){Swap((a[parent]), (a[child]));parent child;child parent * 2 1;}else{break;}}
}void HeapSort(int* a, int size)
{//排降序 -- 建小堆/*for (int i (size - 1 - 1) / 2; i 0; i--){AdjustDown(a, size, i);}*///排升序 -- 建大堆for (int i (size - 1 - 1) / 2; i 0; i--){AdjustDown(a, size, i);}//排序int end size - 1;while (end 0){Swap((a[0]), (a[end]));AdjustDown(a, end, 0);end--;}
}int main()
{int a[6] { 22,33,222,1,2,55 };HeapSort(a, 6);for (int i 0; i 6; i){printf(%d , a[i]);}printf(\n);return 0;
}运行结果测试截图 总结撒花 本篇文章旨在分享详解小白如何使用C语言实现堆数据结构。希望大家通过阅读此文有所收获 如果我写的有什么不好之处请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦~