当前位置: 首页 > wzjs >正文

网站建设新闻 常识外贸网络推广营销

网站建设新闻 常识,外贸网络推广营销,建材 东莞网站建设,百度竞价代理公司堆排序 有关 “堆” 知识的详解可以看这里——【堆】 其他经典比较类排序算法可以看这里——【六大比较类排序算法】 1. 建堆 在之前我们了解了堆,我们都知道大顶堆和小顶堆的特点: 小顶堆:任意节点的值 ≤ 其子节点的值。大顶堆&#xff…

堆排序

有关 “堆” 知识的详解可以看这里——【堆】
其他经典比较类排序算法可以看这里——【六大比较类排序算法】

1. 建堆

在之前我们了解了堆,我们都知道大顶堆和小顶堆的特点:

  • 小顶堆:任意节点的值 ≤ 其子节点的值。
  • 大顶堆:任意节点的值 ≥ 其子节点的值。

而大顶堆的根节点是整棵树中最大的数,小顶堆的根节点是整棵树中最小的数。我们就可以根据这一点来进行排序的操作。

首先既然是堆排序,那么这个数组就得先是一个堆。现在我们随机给一个数组 {27,28, 65, 25, 15, 34, 19, 49, 18, 37 }。它是无序的且不满足堆的特点。
请添加图片描述

这个时候我们就可以利用向下调整算法来对这个数组进行建堆的操作:(以建小堆为例)

请添加图片描述

// 数组建堆算法
for (int i = (n - 1 - 1) / 2; i >= 0; --i){AdjustDown(arr, n, i);
}

2. 排序

建好堆后,这个时候这个数组已经变成了一个小顶堆。此时最小的数在最上面,已经被选出来了。现在我们可以将这个数与最后一个数,也就是最后一个叶子节点做交换,并且之后不把这个最小的数看作是堆内的数据(不删除),再对剩下的 n − 1 n-1 n1 个数做向下调整再次构建一个小顶堆,选出次小的数,放在末尾。这样循环操作,我们就可以得到一个排好序的降序的数组。

下面是动图演示:
请添加图片描述

注意构建小顶堆最后排出来的是降序的数组,如果想要升序的数组,则需要构建大顶堆

// 向下调整法
// 建小堆
void AdjustDown(HPDataType* a, int n, int root){int parent = root;int child = 2 * parent + 1;while(child < n){// 防止没有右孩子       左右孩子比较if(child + 1 < n && a[child] > a[child + 1]){child++;  // 如果左孩子大,那就要选右孩子,因此++}// 父节点与小的那个孩子比较,如果父节点大,则交换if(a[parent] > a[child]){int temp = a[parent];a[parent] = a[child];a[child] = temp;parent = child;  // 更新下标child = 2 * parent + 1;  // 找到新的孩子然后继续比较}else{break;}}
}// 堆排序(排逆序)
void HeapSort(int* a, int n){// 建小堆for (int i = (n - 1 - 1) / 2; i >= 0; --i){	// 建小堆和建大堆的向下调整函数内部判断条件略有不同AdjustDown(a, n, i);}int end = n - 1;// 把最大的换到最后一个位置,不把最后一个数看作堆里的// 每次选出剩下数中最大的// 从后往前放while (end > 0){int tem = a[end];a[end] = a[0];a[0] = tem;// 选出次大的数AdjustDown(a, end, 0);--end;}
}

3. 算法分析

在上一篇文章我们分析过建堆的时间复杂度为 O ( N ) O(N) O(N)

而向下调整算法的时间复杂度为 O ( l o g 2 N ) O(log_2N) O(log2N)

所以堆排序的时间复杂度为 O ( N l o g 2 N ) O(Nlog_2N) O(Nlog2N)
空间复杂度 O ( 1 ) O(1) O(1)

4. 总结对比

排序方法平均情况最好情况最坏情况辅助空间稳定性
插入排序 O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)稳定
选择排序 O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)不稳定
冒泡排序 O ( n 2 ) O(n^2) O(n2) O ( n ) O(n) O(n) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)稳定
希尔排序 O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) ~ O ( n 2 ) O(n^2) O(n2) O ( n 1.3 ) O(n^{1.3}) O(n1.3) O ( n 2 ) O(n^2) O(n2) O ( 1 ) O(1) O(1)不稳定
快速排序 O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n 2 ) O(n^2) O(n2) O ( log ⁡ n ) O(\operatorname{log}n) O(logn) ~ O ( n ) O(n) O(n)不稳定
归并排序 O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n ) O(n) O(n)稳定
堆排序 O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( n log ⁡ n ) O(n\operatorname{log}n) O(nlogn) O ( 1 ) O(1) O(1)不稳定
http://www.dtcms.com/wzjs/425316.html

相关文章:

  • 刷网站排名 优帮云苹果看国外新闻的app
  • 结构设计在哪个网站接单兼职做网络公司网页设计
  • 重庆巴南网站建设全国疫情最新情况最新消息今天
  • 佛山模板建站在线教育
  • 做网站的IDEseo网络营销公司
  • 网站开发的硬件环境是什么常用的网络推广的方法有哪些
  • 北京网站seo优化供应商郑州怎么优化网站排名靠前
  • 最好的品牌设计网站建设推广策划书模板范文
  • 长治网站建设关键词优化课程
  • 深圳手机网站建设多少钱域名解析ip地址查询
  • 云南网站建设费用上海百度公司地址在哪里
  • 鹤山网站建设易搜互联文章推广平台
  • 大背景 网站咸阳seo公司
  • 做网站前需要准备什么软件线下推广活动策划方案
  • 展示型外贸网站建设seo模拟点击有用吗
  • vs2008可以做网站百度竞价推广运营
  • 网站平台建设要多久seo搜索引擎推广什么意思
  • 做电子商务平台网站需要多少钱网络推广 公司 200个网站
  • 站酷设计网站官网入口文字设计如何做seo优化
  • 长春世邦做网站精准营销通俗来说是什么
  • 泉州网站开发建设seo排名快速刷
  • 做特殊任务的网站新东方教育培训机构官网
  • 网站制作com cn域名有什么区别网络营销的四种形式
  • 浙江省网站建设公司seo优化技巧有哪些
  • 深圳福田做网站公司中国十大广告公司排行榜
  • 长沙经开区建管站灰色行业推广
  • 寮步镇仿做网站seo优化便宜
  • 广告网站定制厦门seo外包服务
  • 湖南网站推广建设公司有哪些网络营销推广主要做什么?
  • 公司做网站费会计科目小红书广告投放平台