这篇博客接着来说说选择类排序之一的排序:树形选择排序

在简单选择排序中,每次的比较都没有用到上次比较的结果,所以比较操作的时间复杂度是O(N^2),想要降低比较的次数,则需要把比较过程中的大小关系保存下来。树形选择排序是对简单选择排序的改进。

树形选择排序:又称锦标赛排序(Tournament Sort),是一种按照锦标赛的思想进行选择排序的方法。首先对n个记录的关键字进行两两比较,然后在n/2个较小者之间再进行两两比较,如此重复,直至选出最小的记录为止。

算法实现代码如下:

package exp_sort;public class TreeSelectSort {public static int[] TreeSelectionSort(int[] mData) {int TreeLong = mData.length * 4;int MinValue = -10000;int[] tree = new int[TreeLong]; // 树的大小int baseSize;int i;int n = mData.length;int max;int maxIndex;int treeSize;baseSize = 1;while (baseSize < n) {baseSize *= 2;}treeSize = baseSize * 2 - 1;for (i = 0; i < n; i++) {tree[treeSize - i] = mData[i];}for (; i < baseSize; i++) {tree[treeSize - i] = MinValue;}// 构造一棵树for (i = treeSize; i > 1; i -= 2) {tree[i / 2] = (tree[i] > tree[i - 1] ? tree[i] : tree[i - 1]);}n -= 1;while (n != -1) {max = tree[1];mData[n--] = max;maxIndex = treeSize;while (tree[maxIndex] != max) {maxIndex--;}tree[maxIndex] = MinValue;while (maxIndex > 1) {if (maxIndex % 2 == 0) {tree[maxIndex / 2] = (tree[maxIndex] > tree[maxIndex + 1] ? tree[maxIndex]: tree[maxIndex + 1]);} else {tree[maxIndex / 2] = (tree[maxIndex] > tree[maxIndex - 1] ? tree[maxIndex]: tree[maxIndex - 1]);}maxIndex /= 2;}}return mData;}public static void main(String[] args) {// TODO Auto-generated method stubint array[] = { 38, 62, 35, 77, 55, 14, 35, 98 };TreeSelectionSort(array);for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}System.out.println("\n");}}

算法分析:

在树形选择排序中,除了最小的关键字,被选出的最小关键字都是走了一条由叶子结点到跟节点的比较过程,由于含有n个叶子结点的完全二叉树的深度log2n+1,因此在树形选择排序中,每选出一个较小关键字需要进行log2n次比较,所以其时间复杂度是O(nlog2n),移动记录次数不超过比较次数,故总的算法时间复杂度为O(nlog2n),与简单选择排序算法相比,降低了比较次数的数量级,增加了n-1个额外的存储空间存放中间比较结果。

在下一节中,我们说一种改进树形选择·排序的另一种排序方法——堆排序。

数据结构排序系列详解之六 树形选择排序相关推荐

  1. 数据结构排序系列详解之五 简单选择排序

    在前面的博客中已经讲述了交换类的排序算法,这节中开始说说选择类的排序算法了,首先来看一下选择排序的算法思想: 选择排序的基本算法思想: 每一趟在 n-i+1 (i=1,2,3,--,n-1)个记录中选 ...

  2. 数据结构排序系列详解之二 希尔排序

    接着上一篇博客,这篇要介绍的是希尔排序(缩小增量排序法). 希尔排序:通过比较相距一定间隔的元素来工作:各趟比较所用的距离(增量)随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.是插入排序 ...

  3. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  4. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  5. 数据结构排序系列详解之七 归并排序

    在前面说的那几种排序都是将一组记录按关键字大小排成一个有序的序列,而归并排序的思想是:基于合并,将两个或两个以上有序表合并成一个新的有序表 归并排序算法:假设初始序列含有n个记录,首先将这n个记录看成 ...

  6. 数据结构排序系列详解之一 插入排序

    复习之余,就将数据结构中关于排序的这块知识点整理了一下,写下来是想与更多的人分享,最关键的是做一备份,为方便以后查阅. 排序 1.概念: 有n个记录的序列{R1,R2,.......,Rn}(此处注意 ...

  7. java 排序方法详解_java中关于排序方式的实例讲解

    冒泡排序 特点:效率低,实现简单 思想(从小到大排):每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素.这只是冒泡排序的一种,当然也可以从后往前排.publi ...

  8. 数据结构排序系列详解之四 快速排序

    交换类排序的另一个方法,即快速排序. 快速排序:改变了冒泡排序中一次交换仅能消除一个逆序的局限性,是冒泡排序的一种改进:实现了一次交换可消除多个逆序.通过一趟排序将要排序的数据分割成独立的两部分,其中 ...

  9. 数据结构排序系列详解之三 冒泡排序

    前面两篇博客讲述的排序算法都是基于插入类的排序,这篇文章开始介绍交换类的排序算法,即:冒泡排序.快速排序(冒泡排序的改进). 交换类的算法:通过交换逆序元素进行排序的方法. 冒泡排序:反复扫描待排序记 ...

最新文章

  1. 1012 The Best Rank
  2. 网络流FF,EK,dinicm, isap算法板子//带注释
  3. python 保存模型、加载模型 Joblib
  4. Solr搜索的排序打分规则探讨
  5. Wecoach陈隽永:如何打造一款完美的智能硬件App?
  6. php js 比较大小写,JavaScript中如何实现大小写转换
  7. python vtk mousemove_VTK的视点研究之三维空间漫游(转载)
  8. COMA(二):Counterfactual Multi-Agent Policy Gradients 论文讲解
  9. linux内核编译如何选择cpu类型,Ubuntu内核编译和CPU Hot-Plug特性配置全过程及遇到问题记录...
  10. sublime3使用笔记
  11. 【Oracle】等待事件详细内容
  12. 1028 人口普查 (Python实现)
  13. 4.10验证码(抠图)和超级鹰的使用
  14. 各行各业求职-招聘QQ群欢迎加入
  15. python查询12306余票_Python实现查询12306火车票信息
  16. 带你快速入门AXI4总线--汇总篇
  17. 大厂面经丨Nginx 面试 40 问
  18. Hive中的in、exists和left semi join
  19. win10如何开启自带的虚拟机?
  20. OOM和JVM最详细介绍

热门文章

  1. 使用VMM2008 R2管理Hyper-V之1-实验环境与VMM 2008安装
  2. Matlab APP designer 里的grid on 和hold on
  3. 图像处理课程设计大报告 MATLAB GUI APP实现直方图均衡化、几何变换和加噪滤波
  4. android crash分析工具,Android Crash之Native Crash分析
  5. red hat 查看mysql密码_Red Hat 下 MySQL root密码恢复
  6. sony微型计算机,舍我其谁?只有SONY做得到!
  7. 分析mysql慢查询_mysql慢查询的分析方法_MySQL
  8. 前端工程师需要学习ps 吗_转行学习web前端开发,需要哪些工具和需要学习什么?...
  9. cuda nvidia安装程序失败_Ubuntu16.04安装nvidia-docker
  10. 电脑充不满电一直95_居民:小区充电桩为何充不满电?有关部门这样回应