首页 > 编程语言 > 详细

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

时间:2019-04-04 19:41:23      阅读:200      评论:0      收藏:0      [点我收藏+]

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+树:

应用场景:

操作的不是内存里的数据

操作的是硬盘里的数据

 

高度有限

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

 

 

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

 

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

原文:https://www.cnblogs.com/eret9616/p/10656418.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!