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

河南网站推广优化报价windows7做网站

河南网站推广优化报价,windows7做网站,安徽网站制作公司,网站备案信息如何注销吗原创不易#xff0c;转载请注明出处。欢迎点赞收藏~ 堆排序#xff08;Heap Sort#xff09;是一种基于二叉堆数据结构的排序算法。它将待排序的元素构建成一个最大堆#xff08;或最小堆#xff09;#xff0c;然后逐步将堆顶元素与堆的最后一个元素交换位置#xff0c… 原创不易转载请注明出处。欢迎点赞收藏~ 堆排序Heap Sort是一种基于二叉堆数据结构的排序算法。它将待排序的元素构建成一个最大堆或最小堆然后逐步将堆顶元素与堆的最后一个元素交换位置并重新调整堆使得剩余未排序部分继续满足堆的性质。通过不断重复这个过程最终将得到一个有序的序列。 具体步骤如下 1. 构建初始堆首先将待排序序列看作是完全二叉树从最后一个非叶子节点开始逐个向上调整节点使得以每个节点为根的子树都满足堆的性质。 2. 排序将堆顶元素与待排序序列的最后一个元素交换位置然后将剩下的 n-1 个元素重新调整为堆。重复这个过程直到堆中只剩下一个元素即完成排序。 堆排序的关键操作是堆的调整有两种方式可以实现 1. 自顶向下调整Down-Heapify从根节点开始不断将根节点与其左右子节点中较大或较小的交换直到满足堆的性质。 2. 自底向上调整Up-Heapify从最后一个非叶子节点开始往上逐个调整将每个节点与其左右子节点中较大或较小的交换直到满足堆的性质。 堆排序的时间复杂度为O(nlogn)其中n是待排序元素的个数。堆的构建过程需要O(n)的时间每次调整堆的操作需要O(logn)的时间共需要进行n-1次调整。所以总体时间复杂度是O(nlogn)。 堆排序的空间复杂度为O(1)它是一种原地排序算法不需要额外的存储空间。 堆排序具有以下特点 稳定性堆排序是一种不稳定的排序算法即相同元素的相对位置可能会发生改变。 适应性堆排序适用于大规模数据的排序因为它的时间复杂度不会随数据规模增大而增加且不需要额外的存储空间。 不适应性堆排序不适用于小规模数据的排序因为它的常数因子较大且堆的构建过程需要较多的比较和交换操作。 需要注意的是堆排序对于相同元素的排序可能会打乱它们的原始相对顺序这是由于堆本身的性质所决定的。如果要保持相同元素的相对顺序不变可以采用稳定的排序算法来代替堆排序。 以下是一个使用C语言实现堆排序的示例代码 #include stdio.h// 交换两个元素的值 void swap(int *a, int *b) {int temp *a;*a *b;*b temp; }// 调整最大堆使根节点为最大值 void max_heapify(int arr[], int n, int i) {int largest i; // 初始化最大值为根节点int left 2 * i 1; // 左子节点索引int right 2 * i 2; // 右子节点索引// 如果左子节点大于根节点更新最大值为左子节点if (left n arr[left] arr[largest])largest left;// 如果右子节点大于当前最大值更新最大值为右子节点if (right n arr[right] arr[largest])largest right;// 如果最大值不是根节点则交换根节点和最大值if (largest ! i){swap(arr[i], arr[largest]);// 递归调整交换后的子树max_heapify(arr, n, largest);} }// 堆排序函数 void heap_sort(int arr[], int n) {// 构建最大堆初始状态for (int i n / 2 - 1; i 0; i--)max_heapify(arr, n, i);// 逐个将堆顶元素移至末尾并重新调整堆for (int i n - 1; i 0; i--){// 将堆顶元素最大值与当前未排序部分的最后一个元素交换swap(arr[0], arr[i]);// 对剩余元素进行调整使其满足最大堆性质max_heapify(arr, i, 0);} }int main() {int arr[] {12, 11, 13, 5, 6, 7};int n sizeof(arr) / sizeof(arr[0]);printf(排序前的数组\n);for (int i 0; i n; i){printf(%d , arr[i]);}heap_sort(arr, n);printf(\n排序后的数组: \n);for (int i 0; i n; i){printf(%d , arr[i]);}putchar(\n);return 0; }这个示例中实现了堆排序算法。代码首先定义了两个辅助函数swap用于交换两个元素的值max_heapify用于调整最大堆。 max_heapify函数接收一个数组、堆的大小n和要调整的节点索引i作为参数。该函数首先将最大值初始化为当前节点根节点然后比较左子节点和右子节点的值更新最大值。如果最大值不是根节点则将其与根节点交换并递归调用max_heapify来保持堆的性质。 heap_sort函数首先构建最大堆通过循环调用max_heapify然后逐个将堆顶元素最大值移动到未排序部分的末尾并重新调整堆。在每次迭代中通过swap操作将最大值放在数组的末尾并对剩余元素进行调整使其满足最大堆的性质。 最后main函数创建一个包含一些无序元素的数组并调用heap_sort函数对数组进行排序。排序后打印出排序后的数组。 请注意这只是一个简单的堆排序示例实际应用中可能需要考虑更多的边界情况和错误处理。 运行如上代码你可以看到以下输出
http://www.pierceye.com/news/552414/

相关文章:

  • 网站建设费用申报佛山电脑培训班哪里有
  • 免费网站服务器厦门网站建设推广哪家好
  • 青海海东平安县建设局网站如何建设旅游网站
  • 成都响应式网站开发百度里面的站长工具怎么取消
  • 手机购物网站设计广告设计有限公司
  • 新手制作网站wordpress lamp 教程
  • 响应式的网站做优化好吗wordpress删掉自豪
  • 做网站第一步创建网站根目录
  • vs2010做网站前台专门做试题的网站
  • 柳州集团学校网站建设做美食推广的网站
  • 网站开发 发送邮件功能深圳做分销商城网站
  • 网站备案 取消网上智慧团建官网入口
  • 网站开发 无代码app 外包开发公司
  • 做网站应该用什么配置的手提电脑免费微商城小程序模板
  • 义乌外贸网站建设公司服务外包和劳务外包区别
  • 四川长昕建设工程有限公司网站兰州网站哪里做
  • 电子商务网站规划与管理申请一个域名后怎么做网站
  • 中小企业网站制作方法桂林景区网站策划
  • shopify做全品类网站提交链接
  • 网站建设和运营哪家公司好宠物医疗设计素材网站
  • 泰州网站制作公司中国空间站机械臂
  • 信誉好的常州网站建设网监备案网站更换域名
  • 淮南品牌网站建设电话南昌网站建设q479185700棒
  • 富阳区住房和城乡建设局网站广州市住房保障和房屋管理局
  • 江门建设局网站上海住房和城乡建设部网站
  • 开一个网站需要什么建设商务网站的方案
  • asp.net网站开发 pdf全球互联网中心在哪里
  • 做外贸网站要有域名学什么可以做网站
  • 服装高级定制品牌app排名优化
  • 济南推广网站建设保定seo网络推广