二叉树:

1、每个结点不能多于两个子树;

2、一颗平衡二叉树的深度要比及结点个数N小得多。

二叉查找树:

1、结点x的所有左子树的值小于x,所有右子树的值大于x;

AVL树:

1、一种带有平衡条件的二叉查找树;

2、每个结点的左子树和右子树深度最多差1。

红黑树:

1、树的颜色只能为红色或黑色的一种平衡二叉树;

2、树的根结点和叶子结点必须为黑色;

3、红色结点的子结点必须为黑色,且必存在;

4、任一结点到其每个叶子结点黑色的结点树相同;

5、从根到叶子的最长的可能路径不多于最短的可能路径的两倍长

红黑树与平衡二叉树:

红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。

平衡二叉树又被称为AVL树

红黑树有更好的效率,更高的统计性能

鸡尾酒排序:

 
<wiz_code_mirror>

 
 
 
 
 
 
 
private static void sort(int[] arrys) {
        int tmp = 0;
        for (int i = 0; i < arrys.length/2; i++) {
            boolean isSorted = true;
            for (int j = i; j < arrys.length-i-1; j++) {
                if(arrys[j]>arrys[j+1]){
                    tmp = arrys[j];
                    arrys[j] = arrys[j+1];
                    arrys[j+1] = tmp;
                    isSorted = false;
                }
            }
            if(isSorted){
                break;
            }
            isSorted = true;
            for (int j = arrys.length-i-1; j > i; j--) {
                if(arrys[j]<arrys[j-1]){
                    tmp = arrys[j];
                    arrys[j] = arrys[j-1];
                    arrys[j-1] = tmp;
                    isSorted = false;
                }
            }
            if(isSorted){
                break;
            }
        }
    }
 
 
快速排序:
 
<wiz_code_mirror>

 
 
 
 
 
 
 
private static void sort(int[] arrys,int low, int high) {
        int start = low;
        int end = high;
        int key = arrys[start];
        while(end>start){
            while(end>start&&arrys[end] >= key)//如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
                end--;
            if(key >= arrys[end]){
                int tmp = arrys[end];
                arrys[end] = arrys[start];
                arrys[start] = tmp;
            }
            while(end>start&&key >= arrys[start])
                start++;
            if(arrys[start] >= key){
                int tmp = arrys[end];
                arrys[end] = arrys[start];
                arrys[start] = tmp;
            }
            //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
        }
        if(start > low){
            sort(arrys, low, start-1);//左边序列。第一个索引位置到关键值索引-1
        }
        if(high>end){
            sort(arrys, end+1, high);//右边序列。从关键值索引+1到最后一个
        }
    }
 
 
 

Java常用数据结构和算法的更多相关文章

  1. 常用数据结构及算法C#/Java实现

    常用数据结构及算法C#实现 1.冒泡排序.选择排序.插入排序(三种简单非递归排序) ,, , , , , , , , , }; //冒泡排序 int length = waitSort.Length; ...

  2. JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...

  3. (6)Java数据结构-- 转:JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析  http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...

  4. 【转载】图解Java常用数据结构(一)

    图解Java常用数据结构(一)  作者:大道方圆 原文:https://www.cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Jav ...

  5. java版数据结构与算法 (1综述)

    很大部分转载自 https://blog.csdn.net/singit/article/details/54898316 数据的逻辑结构:反映数据元素之间的逻辑关系的数据结构,其中的逻辑关系指数据元 ...

  6. 图解Java常用数据结构

    最近在整理数据结构方面的知识, 系统化看了下 Java 中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 jdk8, 可能会有些特性与 jdk7 之前不相同, 例如 LinkedList ...

  7. java之数据结构与算法

    1.了解基本数据结构及特点 如,有哪些二叉树,各有什么特点 树二叉搜索树 每个节点都包含一个值,每个节点至多有两棵子树,左孩子小于自己,右孩子大于自己,时间复杂度是O(log(n)),随着不断插入节点 ...

  8. 面试常考的常用数据结构与算法(zz)

    数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易.在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结 ...

  9. Java 常用数据结构对象的实现原理 集合类 List Set Map 哪些线程安全 (美团面试题目)

    Java中的集合包括三大类,它们是Set.List和Map, 它们都处于java.util包中,Set.List和Map都是接口,它们有各自的实现类. List.Set都继承自Collection接口 ...

随机推荐

  1. android Paint属性

    **       * Paint类介绍       *        * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色,     * 样式等绘制信息,指定了如何绘制文本和图形 ...

  2. elasticsearch入门使用(一)es 6.2.2安装,centos 7

    elasticsearch(一般叫es)是基于Lucene的搜索服务器,提供http协议接口使用json格式数据,也提供相应的客户端,更详细的信息[优点&场景]请百度百科, 以下官网截图,官网 ...

  3. 关于 最短路条数 和 边不可重复最短路条数问题 /hdu3599(边不可重复最短路)

    原先一直在做一道省赛题,由于题意错误理解成球最短路条数,误打误撞敲了最短路条数,又发现hdu3599(多校)求边不可重复最短路条数.下面说说俩种问题解法: 最短路条数: 求一个图一共一几条最短路径,思 ...

  4. codeforces Gym 101572 I 有向图最小环路径

    题目链接 http://codeforces.com/gym/101572 题意  一共n个文件  存在依赖关系 根据给出的依赖关系   判断是否存在循环依赖 ,不存在的话输出SHIP IT,存在的话 ...

  5. Java中循环与选择语句

    public class Ifelse{ public static void main(String [] args){ int score=98; if(score>=90&& ...

  6. 前端和后端采用接口访问时的调用验证机制(基于JWT的前后端验证)(思路探讨)

    说明:基于前后端,尤其是使用Ajax请求的接口,现在市面上网页上调用的Ajax基本都是没有验证的,如果单独提取之后可以无线的刷数据. 继上一篇http://www.cnblogs.com/EasonJ ...

  7. PYTHON 源码

    http://www.wklken.me/index2.html http://blog.csdn.net/dbzhang800/article/details/6683440

  8. .net core webapi jwt 更为清爽的认证

    原文:.net core webapi jwt 更为清爽的认证 我的方式非主流,控制却可以更加灵活,喜欢的朋友,不妨花一点时间学习一下 jwt认证分为两部分,第一部分是加密解密,第二部分是灵活的应用于 ...

  9. python实现网速控制,限制上传下载速度

    对于python的web,比如flask使用的werkzeug,首先找到wsgi的请求和响应的代码,使用算法实现大文件的小速率上传和下载 考虑python实现socket限流 关于限速的讨论:http ...

  10. 使用RTL-SDR,从打开一个车门到批量打开车门

    在最近几年,入侵汽车在当代社会的黑客圈中成为热点,很多文章表明汽车产业还有很多东西等待完善,在本篇文章中,我会让你熟悉我一直研究的一些概念,以及如何在网状网络中使用一些便宜的部件渗透远程开门系统. 软 ...