zoukankan      html  css  js  c++  java
  • 数据结构(5) 第五天 快速排序、归并排序、堆排序、高级数据结构介绍:平衡二叉树、红黑树、B/B+树

    01 上次课程回顾

    希尔排序 又叫减少增量排序

    increasement = increasement / 3 + 1

    02 快速排序思想

    思想: 分治法 + 挖坑填数

    分治法: 大问题分解成各个小问题,对小问题求解,使得大问题得以解决

    03 快速排序代码实现

    let arr = [23,123,34,5,123,5,5,3,2,3,1,46,234,123,123]

    function quicksort(arr,start,end)
    {
    let i = start
    let j = end
     
    // 设置递归退出条件
    if(start >= end) return

    let benchmark = arr[start]

    while(i != j)
    {
    while(i<j && arr[j] >= benchmark)
    {
    j--;
    }
    while(i<j && arr[i] <= benchmark)
    {
    i++;
    }

    if(i<j)
    {
    let t = arr[i]
    arr[i] = arr[j]
    arr[j] = t
    }
    }

    arr[start] = arr[i]
    arr[i] = benchmark

    quicksort(arr,start,i-1)
    quicksort(arr,i+1,end)
    }

    quicksort(arr,0,arr.length-1)

    console.log(arr)

    04 归并排序

    归并排序基本思想: 将两个有序序列合并成一个有序序列

    将两个合成一个有序序列

    06 堆排序思路

    完全二叉树

    知道完全二叉树(complete binary tree)的先序序列就可以确定它的唯一结构:

     

    堆:

    大顶堆:

    父节点比两个子节点大

    小顶堆:

    父节点比两个子节点都小

    堆就是完全二叉树 不过要满足条件:

    给了我们一个数组 就相当于给了我们一个完全二叉树 他还不满足堆的条件

    通过调整堆,初始化堆

    数组个数除以2正好是最后一个子树

    然后在这个子树里面进行交换 形成堆

    08 web闲聊

    socket套接字

    补:高级数据结构:

    二叉排序树:

    一棵树 左边比结点小 右边比结点大

    用来查找。

    平衡二叉树:

    二叉排序树可能退化成一种链表。

    平衡二叉树左右子树差不能大于一(小于等于)

    反转:

    红黑树

    1. 节点颜色: 红,黑
    2. 根节点必须是黑色的
    3. 红节点下边不能挂红结点
    4. 每一条路径的黑结点个数相等
    5. NULL结点默认是黑色的

    B树,B+树:

    应用场景:

    操作的不是内存里的数据

    操作的是硬盘里的数据

    高度有限

    子节点很多(孩子最少几千个,不是二叉树)

    应用:操作系统的文件系统 数据库的数据文件

  • 相关阅读:
    2019年11月4日随堂测试 最多输入字母统计
    写增删改查中间遇到的问题
    2019年12月9日下午自习成果
    2019年12月16日 分级考试
    2019年11月18日 JAVA期中考试 增删改查
    sql语言积累
    【转载】Java项目中常用的异常处理情况总结
    泛型
    C#数字格式化输出
    委托,Lambda的几种用法
  • 原文地址:https://www.cnblogs.com/eret9616/p/10656418.html
Copyright © 2011-2022 走看看