数据结构排序算法的总结图,数据结构简单选择排序图解

  数据结构排序算法的总结图,数据结构简单选择排序图解

  Yyds干货库存

  1.前言回顾:之前的【图形数据结构】排序综合总结(第一部分)对插入类和交换类排序做了详细的总结,需要很好的掌握直接插入、半插入排序和冒泡排序。

  学习目标:掌握简单选择排序算法,了解树选择排序、堆选择排序、归并排序和基数排序的特点、时空复杂度和算法流程。

  第二,选择上课的种类

  定义:从待排序的无序序列中选择最大或最小的数,放在前面,当数据元素为空时排序结束。

  动态演示:

  算法解释:

  从第一个数开始寻找比这个数小的下标,最后交换元素。

  从第二个数开始寻找比这个数小的下标,最后交换元素。

  以上操作总共重复n-1次,排序完成。

  代码:

  void SelectSort(RecordType r[],int length)

  /*对记录数组R简单排序,长度为数组的长度*/

  int i,j,k,n=长度;

  记录类型x;

  for(I=1;I=n-1;我)

  k=I;

  for(j=I ^ 1;j=n;j)

  if (r[j]。键r[k]。key)k=j;

  如果(k!=i)

  x=r[I];r[I]=r[k];r[k]=x;

  }

  特点:

  不稳定排序

  时间复杂度为O(n*n),空间复杂度为O(1)

  2.树选择和排序

  静态演示:

  算法解释:

  底线21 25 49 25 16 08 63是一个给定的数字,需要从小到大排序。

  相邻的两个选择最小的一个向上移动一层,只有其中一个组成无限个。

  倒数第二层再次成对组合,直到顶部。

  此时,前08为数值最低的数字,输出08,08全部设为无穷大。

  再次选择一个最小值,以此类推

  特点:

  不需要算法。

  稳定的分类和额外的存储空间。

  时间复杂度O(nlogn),空间复杂度O(n-1)

  3.堆选择和排序

  动态演示:

  算法解释:

  值最大的根节点称为大顶堆,值最小的根节点称为小顶堆。上图是构造大顶堆的示意图。

  从最后一级开始,如果子节点的值大于父节点的值,则交换位置。

  逐层向上推,直到根节点有最大值。

  构建初始堆:

  void crt_heap(RecordType r[],int length)

  /*为记录数组R建立一个堆,长度为数组的长度*/

  int i,n;

  n=长度;

  for(I=n/2;I-I)/*从第[n/2]条记录开始,筛选并建立堆*/

  sift(r,I,n);

  }

  调整堆:

  void sift(记录类型r[],int k,int m)

  /*假设r[k.m]是以r[k]为根的完全二叉树,以R [2k]和R [2k1]为根的左右子树是大根桩,调整R [k]使整个序列r[k.m]满足堆的属性*/

  { record type t;int i,j;int x;int已完成;

  t=r[k];/*临时存储“根”记录r[k] */

  x=r[k]。关键;I=k;j=2 * I;

  完成=假;

  while( j=m!已完成)

  if (j m r[j].键r[j 1]。key)j=j 1;/*如果有右子树,

  并且右边子树的根处的关键字是大的,沿着右边分支的‘filter */

  if ( x=r[j])。key)完成=真;/*筛选已完成*/

  其他

  { r[I]=r[j];I=j;j=2 * I;}/*继续过滤*/

  r[I]=t;/* r[k]填入适当的位置*/

  }

  堆排序:

  void HeapSort(RecordType r[],int length)

  /*堆排序r[1.n],并且这个算法实现后,R中的记录按关键字由大到小的顺序排列*/

  int i,n;记录类型b;

  crt_heap(r,长度);n=长度;

  for(I=n;我-我)

  b=r[1];/*用堆中的最后一条记录交换顶部的记录*/

  r[1]=r[I];

  r[I]=b;

  sift(r,1,I-1);/*进行调整,使r[1.i-1]变成堆*/

  } /*堆排序*/

  特点:

  堆选是树形的改进,占用空间更少。

  不稳定排序,适合n值较大的排序。

  时间复杂度O(n*logn),空间复杂度O(1)

  三。合并和排序

  方法1:

  把整数一分为二,一层一层细分。

  细分后,对每个块进行排序,直到整个块都按顺序排列。

  方法二:

  一系列序列,两个相邻的合并在一起排序,然后两个相邻的有序合并块再次排序,直到最后排序(先推荐这个算法)。

  代码:

  Void merge sort(记录类型r [],int n)/*对记录数组r[1.n] */

  MSort ( r,1,n,r);

  void MSort(记录类型r1[],int low,int high,记录类型r3[])

  /* R1[低.高电平]置于R3[低电平.高]和R2[低.高]是辅助空格*/

  int mid记录类型R2[20];

  if(低==高)R3[低]=R1[低];

  其他

  mid=(低高)/2;

  MSort(r1,低,中,R2);

  MSort(r1,mid 1,high,R2);

  合并(r2,低,中,高,R3);

  } /* MSort */

  特点:

  时间复杂度O(nlogn),空间复杂度O(n)

  附加空间比较大,很少用于内部排序,主要用于外部排序。

  四。分配类别的排序

  1.多关键字排序

  优先级:根据颜色的大小分为四类,在每一类中按照面值排序。

  优先级:按面值分为13类,同一面值不同颜色排序。

  2.链式基数排序

  算法解释:

  对于以上九个三位数,第一步,我们从小到大排序。

  然后将第一步的结果按照十位数的顺序排序。

  最后借助第二步的结果,按照百位数从小到大排序。

  同样,对于4位5位方法也是如此。

  特点:

  时间复杂度O(d*n),d为关键词个数,n为记录个数

  稳定排序

  空间复杂度=2个队列指针和n个指针字段

  动词(verb的缩写)总结和归纳

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • mysql复合索引和组合索引,mysql组合索引数据结构
  • mysql复合索引和组合索引,mysql组合索引数据结构,Mysql之组合索引方法详解
  • mysql复合索引和组合索引,mysql复合索引数据结构
  • mysql复合索引和组合索引,mysql复合索引数据结构,MySQL的复合索引总结
  • b+树 多路搜索树,数据结构中树的分类
  • b+树 多路搜索树,数据结构中树的分类,数据结构-树(三):多路搜索树B树、B+树
  • avl树的构造,avl树特性,数据结构之AVL树详解
  • 数据结构c语言哈夫曼树,c语言哈夫曼树的构造,使用C语言详解霍夫曼树数据结构
  • c语言数据结构算法编程库,数据结构 c语言中文网
  • c语言数据结构算法编程库,数据结构 c语言中文网,C语言编程数据结构基础详解小白篇
  • c++纸牌游戏,数据结构纸牌游戏c语言
  • c++纸牌游戏,数据结构纸牌游戏c语言,C语言实战之纸牌游戏
  • ,,c#解析jobject的数据结构
  • ,,javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
  • ,,Java 数据结构与算法系列精讲之背包问题
  • 留言与评论(共有 条评论)
       
    验证码: