数据结构排序算法的总结图,数据结构简单选择排序图解
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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。