算法排序
这是在学习过程中,用到的常用算法,希望与大家共勉,共同进步
forwardyzk
这个作者很懒,什么都没留下…
展开
-
数据结构:二叉树遍历集合,树高(Java)
文章目录1.基本介绍2.二叉树示例二叉树图结果打印3.数据结构3.1结点3.2二叉树4.添加结点5.遍历5.1前序遍历前序遍历-递归前序遍历-非递归5.2中序遍历中序遍历-递归中序遍历-非递归5.3后序遍历后序遍历-递归后序遍历-非递归5.4层序遍历6.树高树高-递归树高-非递归7.调用示例1.基本介绍下面介绍的基于二叉树的基本查询的总结.二叉树的插入方法是基于二叉搜索树的规则.left<root<right.结点的高度:结点到其叶子结点的最长路径上的结点个数.结点的深度:树的根结点到原创 2020-08-22 11:57:37 · 869 阅读 · 0 评论 -
查找:分块查找(java)
文章目录1.排序思想2.排序流程图3.打印排序结果4.算法实现4.1数据结构4.2获取所在块4.3分块查找5.调用示例6.复杂度1.排序思想1.将待排序的数组(n)进行分块.2.例如分为s块.那么每一块的结点个数为:n/s;最后一块的结点个数:<=n/s;3.对每i块有要求第 i-1 块中结点的最大值<第 i 块中结点的最小值第 i 块中结点的最大值<第 i+1 块中结点的最小值4.先找待查找的num所在的快,然后再该块中顺序找对应的num.2.排序流程图3.打印排原创 2020-08-15 12:33:08 · 1547 阅读 · 1 评论 -
查找:二分查找(Java)
文章目录1.排序思想2.排序流程图3.打印排序结果4.排序实现5.调用示例6.复杂度1.排序思想1.前提是:排序是数组是有序的,才可以使用二分查找.在数组中查找num的角标位置2.第一次默认查找角标范围:low=0; high=数组的长度-12.每次查找的范围缩小一倍mid=(low+high)/2,根据mid位置值与待查找的值num进行比较.3.判断条件:low<=highnum==mid位置的值,则直接返回mid即可num>mid位置的值,则说明num在mid的右侧.改变low原创 2020-08-15 10:25:54 · 294 阅读 · 0 评论 -
排序:希尔排序(C)
文章目录1.排序思想2.排序流程图3.排序结果4.代码实现4.1 定义数据结构4.2 定义方法集合4.3 方法实现5.调用示例6.复杂度1.排序思想1.将待排序数组进行分组.这个分组的规则是按照增量进行分组.例如:增量为d,也就是两个元素位置相差d在一个组内.分为d组:第0组:[0,0+d,0+2d,0+3d,…]第1组:[1,1+d,1+2d,1+3d,…]第d-1组:[2,2+d,2+2d,2+3d,…]2.组内进行插入排序.3.不断的改变d的大小,然后重复第一步和第二步.4.最后一原创 2020-08-06 10:13:33 · 1871 阅读 · 0 评论 -
排序:插入排序(C)
文章目录1.排序思想2. 排序流程图3.排序流程4.排序设计5.排序实现5.1 定义数据结构5.2 定义排序方法5.3 实现排序方法6.调用示例7.复杂度1.排序思想将待排序数组划分为两个区间1.第一部分[0~i-1]:已排序区间2.第二部分[i~n-1]:未排序区间排序过程:1.从未排序区间取出第一个元素,按照有序的插入到已排序的区间中.2.结束条件:未排序区间中的元素为空.2. 排序流程图3.排序流程待排序数组:[3,7,4,2,8,6,10,11,5,1]第0次排序:[3][原创 2020-08-05 20:01:30 · 213 阅读 · 0 评论 -
排序:归并排序(C)
1.思想1.1 思想流程图1.2 思路解释归并排序思路:1.总体思路:将待排序数组进行拆分成多个分组,然后将拆分后的分组有序的合并.2.现将数组拆分成分组长度(length=1)最小分组.然后将相邻分组两两进行有序合并.2.1 如果总的分组数为偶数,那么正好两两合并.2.2 如果总的分组数为奇数,那么剩下的单个的直接拼在新数组的后面即可.2.3.生成一个按照长度为length合并后的新数组.3.将新的数组进行第二步的操作(length=length*2).直到length>=待排序原创 2020-08-03 17:52:13 · 179 阅读 · 0 评论 -
排序:基数排序(C)
文章目录1.思想1.1 例子1.2.思想介绍2.运行结果3.算法实现3.1 定义数据结构3.2 定义方法集合3.3 方法实现3.4 另外的实现思路1.思想1.1 例子1.2.思想介绍1.基数排序是在箱排序的基础之上进行扩展和完善的2.通过判断待排序的数组中的位数,决定进行创建箱子的个数和遍历的次数.例如:待排序中最多的位数为3位,那么就需要创建三个箱子(当然也可以创建两个,进行复用,记得复用之前要清除之前的箱子),这里我就不复用了.那么需要进行遍历三次3.开始排序(就是遍历装箱操作)3.1原创 2020-07-31 23:59:35 · 366 阅读 · 0 评论 -
排序:快速排序(C)
文章目录1.排序思想2.算法执行结果3.算法实现3.1 数据结构3.2 单次划分方法3.3 快速排序方法3.4 打印数组方法3.5 调用示例4.复杂度1.排序思想1.每次取待排序数组的第一个的数据(x),然后将当前的待排序的数组进行划分.划分成三部分. (小于x的数组)(x)(大于x的数组).2.对 (小于x的数组)和 (小于x的数组)进行划分.就这样递归调用.最关键的就是划分方法:划分的思想:请查看图3.使用递归调用划分方法即可.2.算法执行结果3.算法实现3.1 数据结构type原创 2020-07-31 15:21:55 · 211 阅读 · 0 评论 -
排序:堆排序(C)
1. 堆排序思想1.1 思想概括基于完全二叉树进行操作排序的第一步:创建大根堆(或者小根堆)第二步:取堆顶关键字与无序区最后一个元素互换.然后剩下的无序区元素进行第一步.最后直到无序区元素为1个,结束循环.解释:大根堆:根结点大于左右子孩子小根堆:根结点小于左右子孩子注意:大根堆或者小根堆是完全二叉树.1.2 准备完全二叉树因为堆排序是基于完全二叉树,则提前准备好一个完全二叉树.待排序数组R=[10,15,56,6,33,5,26,8]完全二叉树:1.3 创建大根堆这里以建立原创 2020-07-31 10:42:32 · 1084 阅读 · 1 评论 -
算法例子:二叉树的基本操作(Java)
平时我们也会经常见到二叉树这样的数据结构,这里就对二叉树的基本操作简单的实现以下1.二叉树的创建2.二叉树的插入数据(遵循left<root<=right)3.打印二叉树所有结点(中序遍历,有序的)4.打印二叉树的深度5.打印指定层级的所有结点.6.使用示例先看一个例子:顺序插入数组中的数据:int[] array = new int[]{50, 23, 45, 70, 63, 36, 80, 99, 12};插入的时候,保证left<root<right.最后原创 2020-07-24 15:13:14 · 537 阅读 · 0 评论 -
排序:双向冒泡排序(C)
这是常用的一些基本排序算法.数据结构先定义公共的数据结构typedef int KeyType;typedef struct { KeyType key;}RecType;typedef RecType SeqSortList[MAXSIZE+1];//表中的0元素空着或用作哨兵单元一般把数组中的第0个位置预留出来,为了就作为哨兵,进行两个数据进行交换时,可以把哨兵作为...原创 2019-11-07 18:21:45 · 1262 阅读 · 0 评论 -
排序:桶排序(又称箱排序,C)
箱排序1.例子和运行结果例子:运行结果:2.排序思想1.每个数都是由0-9组成,开始创建10个箱子(序号0-9).2.对待排序进行遍历,按照待排序个位数有序的添加对应箱子中,注意,是有序的添加.(这个可以使用快速排序,直接插入,选择插入…等).3.顺序遍历所有的箱子.然后顺序的读取箱子中的值,顺序存储到数组中,此时这个数组就是有序的数组注意:这里最多创建了10个箱子,如果知道了...原创 2019-11-06 17:13:23 · 779 阅读 · 1 评论 -
算法-线性表常见排序(插入,交换,选择)
线性表-排序定义结构体直接插入排序简单交换排序简单选择排序1.定义基于线性表的排序 排序是计算机数据处理的基本操作和重要技术,能有效提高一个数据处理系统的运行效率. 排序设计要的几个要素 1.排序对象.待排序对象,通常是一个线性表 2.排序标准.定序的依据,由数据元素中一个或者一组数据项充当,这些数据项称为排序关键字,简称关键字 3.排序方向.按照关键字递增还是递减排原创 2016-12-14 15:53:59 · 2201 阅读 · 0 评论