之前的博客介绍介绍了数组的两种排序算法:插入排序和归并排序(採用递归),见链接http://blog.csdn.net/u013165521/article/details/46845033。 本篇博客,介绍还有一种排序算法:堆排序。 (内容 ...
从键盘任意输入一组数, 比如: 。要求对它进行排序,使它顺序排列。 我理解的堆排序思路如下: NO. 首先想着让这组数按下面这种方式形成完全二叉树树型结构。 A 我先给出这棵完全二叉树所具备的一些基本性质: a: 不管这组数是奇数个还是偶数个,假设总数为count,倒数第一个非叶子节点的下标总是 count 。 你可以列举奇数个试一下 b: 叶子节点下标都大于count ,小于count。 c: ...
2019-03-08 21:32 0 835 推荐指数:
之前的博客介绍介绍了数组的两种排序算法:插入排序和归并排序(採用递归),见链接http://blog.csdn.net/u013165521/article/details/46845033。 本篇博客,介绍还有一种排序算法:堆排序。 (内容 ...
一、堆的概念 所谓堆,它是一个数组,也能够被看成一个近似的全然二叉树。树上每一个结点相应数组的一个元素。二叉堆分为二种:最大堆和最小堆。本文主要介绍最大堆,最小堆类似。最大堆的特点:对于随意某个结点,该结点的值大于左孩子、右孩子的值,可是左右孩子的值没有要求。 二、堆排序算法 ...
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key ...
选择类排序包括: (1) 简单选择排序 (2)树形选择排序 (3)堆排序 简单选择排序: 【算法思想】:在第 i 趟简单选择排序中,从第 i 个记录开始,通过 n - i 次关键字比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i 个记录进行交换 ...
看了左神的堆排序,觉得思路很清晰,比常见的递归的堆排序要更容易理解,所以自己整理了一下笔记,带大家一步步实现堆排序算法 首先介绍什么是大根堆:每一个子树的最大值都是子树的头结点,即根结点是所有结点的最大值 堆排序是基于数组和二叉树思想实现的(二叉树是脑补结构,实际是数组) 堆排序过程 ...
1、堆的定义 堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。 堆就是利用完全二叉树的结构来维护的一维数组。 创建一个堆除了一个简单的一维数组以外,不需要任何额外的空间。 如果我们不允许使用指针,那么我们怎么知道哪一个节点是父节点 ...
选择排序是不稳定排序,时间复杂度为O(n^2)。 选择排序类似插入排序,把数组分为两部分,一部分已经排好序,一部分未排序。 刚开始的时候所有的元素都未排序,已排序的部分为空。就好像你手里有十张牌,左手有零张,右手有10张。每次从右手的牌中取最小的一张插入到左手的牌末尾,右手的牌插完了 ...
递归算法是把一个问题分解成和自身相似的子问题,然后再调用自身把相应的子问题解决掉。这些算法用到了分治思想。其基本模式如下: 分解:把一个问题分解成与原问题相似的子问题 解决:递归的解各个子问题 合并:合并子问题的结果得到了原问题的解。 现在就用递归算法,采用上面的分治思想来解合并排序 ...