数据结构和算法
WangYan_shx
这个作者很懒,什么都没留下…
展开
-
二叉树的递归和非递归遍历(java)
package com.wy.binarytree; import java.util.LinkedList; import java.util.Queue; import java.util.Stack; public class BinaryTree { private TreeNode root = null; public BinaryTree(){ root = new原创 2017-05-25 13:42:51 · 1174 阅读 · 1 评论 -
数据结构和算法思维导图
原创 2017-07-12 14:20:36 · 3560 阅读 · 0 评论 -
希尔排序
1、基本思想: 希尔排序也成为“缩小增量排序”,其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序列“基本有序”后,最后在对所有元素进行一次直接插入排序。因此,我们要采用跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。希尔排序转载 2017-04-25 17:04:59 · 267 阅读 · 1 评论 -
插入排序
1、基本思想 直接插入排序的基本操作是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录数增1的有序表。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。 2、复杂度分析 当最好的情况,也就是要排序的表本身就是有序的,此时只有数据比较,没有转载 2017-04-25 17:03:45 · 288 阅读 · 1 评论 -
堆排序
1、基本思想 堆是一种特殊的树形数据结构,其每个节点都有一个值,通常提到的堆都是指一颗完全二叉树,根结点的值小于(或大于)两个子节点的值,同时,根节点的两个子树也分别是一个堆。 堆排序就是利用堆(假设利用大顶堆)进行排序的方法。它的基本思想是,将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),转载 2017-04-25 17:02:43 · 315 阅读 · 1 评论 -
选择排序
1、基本思想: 选择排序是一种简单直观的排序算法,其基本原理如下:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录并与第二个位置记录交换;重复该过程,知道进行比较的记录只剩下一个为止。 2、复杂度分析: 从简单选择排序的过程来看,它最大的特点是交换移动数据次数相当少,这样就节约了相应转载 2017-04-25 17:01:55 · 269 阅读 · 1 评论 -
归并排序
1、基本思想: 归并排序就是利用归并的思想实现的排序方法。而且充分利用了完全二叉树的深度是的特性,因此效率比较高。其基本原理如下:对于给定的一组记录,利用递归与分治技术将数据序列划分成为越来越小的半子表,在对半子表排序,最后再用递归方法将排好序的半子表合并成为越来越大的有序序列。 经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进转载 2017-04-25 17:00:57 · 327 阅读 · 1 评论 -
快速排序
1、基本思想: 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的。快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。同时采用“分而治之”的思想,把大的拆分为小的,小的拆分为更小的,其原理如下:对于给定的一组记录,转载 2017-04-25 17:00:02 · 342 阅读 · 1 评论 -
冒泡排序
1、基本思想 冒泡排序顾名思义就是整个过程像气泡一样往上升,单向冒泡排序的基本思想是(假设由小到大排序):对于给定n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换位置,进行一轮比较和换位后,n个记录的最大记录将位于第n位,然后对前(n-1)个记录进行第二轮比较;重复该过程,直到记录剩下一个为止。 2、复杂度分析 当最好的情况,也就是要排序转载 2017-04-25 16:58:01 · 1095 阅读 · 1 评论 -
常用排序算法
常用排序算法的复杂度分析整理 具体分析如下: 1 冒泡排序(BubbleSort) 冒泡排序是最慢的排序算法。在实际运用中它是效率最低的算法。它通过一趟又一趟地比较数组中的每一个元素,使较大的数据下沉,较小的数据上升。它是O(n^2)的算法。 步骤: (1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 (2)对每一对相邻元素作同样的工作,从开始第一对到转载 2017-04-25 16:56:27 · 346 阅读 · 1 评论 -
排序算法
排序算法 平均时间复杂度 冒泡排序 O(n2) 选择排序 O(n2) 插入排序 O(n2) 希尔排序 O(n1.5) 快速排序 O(N*logN) 归并排序 O(N*logN) 堆排序 O(N*logN) 基数排序 O(d(n转载 2017-02-23 09:15:22 · 284 阅读 · 0 评论