起泡排序、快速排序、选择排序(树形、堆)
2018-03-08 17:45
183 查看
复习 给指定数组排
(约定数组包含N个数据,数组名为array)
起泡排序(升序):
(1):在array[0]位置设置一个标记,比较标记的数据元素以及右相邻元素值大小,若标记元素大于相邻元素则调换两者位置,否则不调换。将标记移动到array[1],继续之前操作直到标记移动到array[N-1]停止。这样一趟比较,处于末尾的数据即为数组最大值。(2):接下来继续(1)的操作,直到array[N-2]停止。因为最后一位已经是最大值所以不用比较。以此类推直到比较N-1趟后所得数组即为升序数组。
快速排序(升序):
(1):将array[0]设置为轴,从array[N-1]开始倒序遍历,直到寻找到比array[0]值小的元素,交换两者位置。然后再从array[0]开始正序遍历,直到找到比array[0] 大的元素。如此反复,直到最后数组满足,轴左边元素值都小于轴值,右边元素都大于轴值。
(2):将满足条件数组以轴为分界,分割成两个数组。分别对两个数组进行(1)操作。以此类推直到不可分割为止,所得即为升序。
选择排序:
树形:
(1):将数组元素当做二叉树最底层叶子节点,将左右叶子节点值较小的值作为父节点值。去掉最底层叶子节点,将剩下节点继续当做叶子节点向上缔结父节点,只到产生根节点,此时根节点值为最小值。
(2):重复(1)的操作,(去掉之前产生过的最小值叶子节点),以此类推直到,将所得最小值依次排列,即为升序。
堆:
大顶堆(1):将数组元素排列成一个完全二叉树,按叶节点不大于父节点的规则对二叉树进行调整(若大于则调换位置)。最后所得二叉树根节点即为最大值,每次调整完成之后即交换根节点与末尾叶节点位置。重复上述操作(调整时将已经获得的最大值节点排除在外),最后所得二叉树,节点即从上至下,从左至右递增。
小顶堆(2):将数组元素排列成一个完全二叉树,按叶节点不小于父节点的规则对二叉树进行调整(若小于则调换位置)。最后所得二叉树根节点即为最小值,每次调整完成之后即交换根节点与末尾叶节点位置。重复上述操作(调整时将已经获得的最小值节点排除在外),最后所得二叉树,节点即从上至下,从左至右递减。
(约定数组包含N个数据,数组名为array)
起泡排序(升序):
(1):在array[0]位置设置一个标记,比较标记的数据元素以及右相邻元素值大小,若标记元素大于相邻元素则调换两者位置,否则不调换。将标记移动到array[1],继续之前操作直到标记移动到array[N-1]停止。这样一趟比较,处于末尾的数据即为数组最大值。(2):接下来继续(1)的操作,直到array[N-2]停止。因为最后一位已经是最大值所以不用比较。以此类推直到比较N-1趟后所得数组即为升序数组。
快速排序(升序):
(1):将array[0]设置为轴,从array[N-1]开始倒序遍历,直到寻找到比array[0]值小的元素,交换两者位置。然后再从array[0]开始正序遍历,直到找到比array[0] 大的元素。如此反复,直到最后数组满足,轴左边元素值都小于轴值,右边元素都大于轴值。
(2):将满足条件数组以轴为分界,分割成两个数组。分别对两个数组进行(1)操作。以此类推直到不可分割为止,所得即为升序。
选择排序:
树形:
(1):将数组元素当做二叉树最底层叶子节点,将左右叶子节点值较小的值作为父节点值。去掉最底层叶子节点,将剩下节点继续当做叶子节点向上缔结父节点,只到产生根节点,此时根节点值为最小值。
(2):重复(1)的操作,(去掉之前产生过的最小值叶子节点),以此类推直到,将所得最小值依次排列,即为升序。
堆:
大顶堆(1):将数组元素排列成一个完全二叉树,按叶节点不大于父节点的规则对二叉树进行调整(若大于则调换位置)。最后所得二叉树根节点即为最大值,每次调整完成之后即交换根节点与末尾叶节点位置。重复上述操作(调整时将已经获得的最大值节点排除在外),最后所得二叉树,节点即从上至下,从左至右递增。
小顶堆(2):将数组元素排列成一个完全二叉树,按叶节点不小于父节点的规则对二叉树进行调整(若小于则调换位置)。最后所得二叉树根节点即为最小值,每次调整完成之后即交换根节点与末尾叶节点位置。重复上述操作(调整时将已经获得的最小值节点排除在外),最后所得二叉树,节点即从上至下,从左至右递减。
相关文章推荐
- 简单选择,冒泡,插入,快速排序之效率比较
- 排序之冒泡 选择 插入 快速(c++)
- 六、内部排序综合(九种)—插入类排序(直接插入、折半插入、希尔排序);交换类排序(冒泡、快速);选择类排序(简单选择、堆排序);二路归并排序;基数排序
- c++实现冒泡,选择,插入,快速排序
- 关于排序(冒泡、选择、插入、快速)的几种算法
- java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)
- C——冒泡排序、快速排序,选择排序
- 快速排序、插入排序、选择、冒泡
- [java]排序分类--及选择排序、插入排序、冒泡排序、快速排序的解释图和代码
- Java算法之排序(快速,冒泡,归并,选择)
- 排序(1)--冒泡,简单选择,快速,简单插入
- 【22】-快速排序随机选择元素的优雅解法
- Java中快速排序,冒泡排序和选择排序的实现
- 插入 | 希尔 | 冒泡 | 快速 | 选择 | 归并排序
- C语言:冒泡排序、选择排序、快速排序、插入排序、“shell”法
- 选择排序 快速排序 二分查找法
- 冒泡,快速,选择排序的Java实现
- 冒泡,插入,折半插入,希尔,快速,简单选择排序的源代码总结
- 比较排序总结——直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序
- java 数组的排序,含冒泡、插入、选择、快速排序。