From fbd2a369b35e9177c8eabff96afcbb5f0ccfeb41 Mon Sep 17 00:00:00 2001 From: yinkanglong_lab Date: Sat, 13 Mar 2021 22:30:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- C++/C++基础/1 变量和基本类型.md | 6 +- C++/C++基础/2 字符串、向量和数组.md | 16 +- C++/C++基础/3 表达式.md | 12 +- C++/C++基础/5 语句.md | 4 +- C++/C++基础/6 函数.md | 4 +- C++/C++基础/7 类.md | 10 +- .../{ => image}/2021-03-03-17-45-17.png | Bin .../{ => image}/2021-03-04-10-42-02.png | Bin .../{ => image}/2021-03-04-10-48-02.png | Bin .../{ => image}/2021-03-04-11-40-28.png | Bin .../{ => image}/2021-03-04-11-41-01.png | Bin .../{ => image}/2021-03-04-11-43-30.png | Bin .../{ => image}/2021-03-04-14-18-52.png | Bin .../{ => image}/2021-03-04-14-38-39.png | Bin .../{ => image}/2021-03-04-15-29-22.png | Bin .../{ => image}/2021-03-04-15-42-38.png | Bin .../{ => image}/2021-03-04-17-20-26.png | Bin .../{ => image}/2021-03-04-17-25-36.png | Bin .../{ => image}/2021-03-04-17-26-34.png | Bin .../{ => image}/2021-03-04-17-30-19.png | Bin .../{ => image}/2021-03-04-17-39-49.png | Bin .../{ => image}/2021-03-04-20-43-17.png | Bin .../{ => image}/2021-03-04-20-43-53.png | Bin .../{ => image}/2021-03-04-21-04-30.png | Bin .../{ => image}/2021-03-04-21-05-54.png | Bin .../{ => image}/2021-03-04-21-57-59.png | Bin .../{ => image}/2021-03-04-22-45-04.png | Bin .../{ => image}/2021-03-05-11-26-54.png | Bin .../{ => image}/2021-03-05-11-28-27.png | Bin .../{ => image}/2021-03-05-13-42-02.png | Bin .../{ => image}/2021-03-05-15-23-34.png | Bin .../{ => image}/2021-03-05-15-25-52.png | Bin .../{ => image}/2021-03-05-15-26-11.png | Bin C++/标准库/0 简介.md | 2 +- C++/标准库/1 通用工具.md | 28 +- C++/标准库/11 lambda表达式.md | 2 +- C++/标准库/12 动态内存.md | 18 +- C++/标准库/2 容器.md | 14 +- C++/标准库/2.1 顺序容器.md | 10 +- C++/标准库/2.2 关联容器.md | 16 +- C++/标准库/2.3 容器适配器.md | 10 +- C++/标准库/3 迭代器.md | 8 +- C++/标准库/4 算法.md | 8 +- C++/标准库/5 字符串.md | 12 +- C++/标准库/6 正则表达式.md | 28 +- C++/标准库/7 IO.md | 8 +- C++/标准库/8 数值.md | 24 +- C++/标准库/9 线程.md | 4 +- .../{ => image}/2021-03-05-16-12-52.png | Bin .../{ => image}/2021-03-05-16-28-34.png | Bin .../{ => image}/2021-03-05-16-29-19.png | Bin .../{ => image}/2021-03-05-17-30-07.png | Bin .../{ => image}/2021-03-05-19-15-08.png | Bin .../{ => image}/2021-03-05-19-42-28.png | Bin .../{ => image}/2021-03-05-20-17-45.png | Bin .../{ => image}/2021-03-05-20-17-55.png | Bin .../{ => image}/2021-03-05-20-26-48.png | Bin .../{ => image}/2021-03-05-20-29-29.png | Bin .../{ => image}/2021-03-05-20-37-12.png | Bin .../{ => image}/2021-03-05-20-40-51.png | Bin .../{ => image}/2021-03-05-20-42-30.png | Bin .../{ => image}/2021-03-05-20-54-47.png | Bin .../{ => image}/2021-03-05-20-56-47.png | Bin .../{ => image}/2021-03-05-21-13-26.png | Bin .../{ => image}/2021-03-05-21-16-10.png | Bin .../{ => image}/2021-03-05-21-16-47.png | Bin .../{ => image}/2021-03-05-21-18-29.png | Bin .../{ => image}/2021-03-05-21-19-36.png | Bin .../{ => image}/2021-03-05-21-20-31.png | Bin .../{ => image}/2021-03-05-21-22-09.png | Bin .../{ => image}/2021-03-05-21-23-27.png | Bin .../{ => image}/2021-03-05-21-29-55.png | Bin .../{ => image}/2021-03-05-21-40-50.png | Bin .../{ => image}/2021-03-05-21-41-56.png | Bin .../{ => image}/2021-03-06-14-01-43.png | Bin .../{ => image}/2021-03-06-14-23-15.png | Bin .../{ => image}/2021-03-06-14-50-48.png | Bin .../{ => image}/2021-03-06-14-51-10.png | Bin .../{ => image}/2021-03-06-15-13-07.png | Bin .../{ => image}/2021-03-06-15-23-17.png | Bin .../{ => image}/2021-03-06-15-27-21.png | Bin .../{ => image}/2021-03-06-15-28-46.png | Bin .../{ => image}/2021-03-06-15-39-37.png | Bin .../{ => image}/2021-03-06-15-41-19.png | Bin .../{ => image}/2021-03-06-15-48-08.png | Bin .../{ => image}/2021-03-06-16-18-21.png | Bin .../{ => image}/2021-03-06-16-20-49.png | Bin .../{ => image}/2021-03-06-16-32-02.png | Bin .../{ => image}/2021-03-06-16-32-39.png | Bin .../{ => image}/2021-03-06-16-33-47.png | Bin .../{ => image}/2021-03-06-16-34-40.png | Bin .../{ => image}/2021-03-06-16-48-05.png | Bin .../{ => image}/2021-03-06-17-05-19.png | Bin .../{ => image}/2021-03-06-17-06-13.png | Bin .../{ => image}/2021-03-06-17-26-40.png | Bin .../{ => image}/2021-03-06-17-43-51.png | Bin .../{ => image}/2021-03-06-17-58-42.png | Bin .../{ => image}/2021-03-06-18-09-20.png | Bin .../{ => image}/2021-03-06-22-29-22.png | Bin .../{ => image}/2021-03-06-22-34-11.png | Bin .../{ => image}/2021-03-06-22-42-35.png | Bin .../{ => image}/2021-03-07-17-22-16.png | Bin .../{ => image}/2021-03-07-17-22-38.png | Bin .../{ => image}/2021-03-07-17-29-36.png | Bin .../{ => image}/2021-03-07-17-32-39.png | Bin .../{ => image}/2021-03-07-17-33-43.png | Bin .../{ => image}/2021-03-07-17-47-32.png | Bin .../{ => image}/2021-03-07-17-48-43.png | Bin .../{ => image}/2021-03-07-19-28-19.png | Bin .../{ => image}/2021-03-07-19-46-47.png | Bin .../{ => image}/2021-03-07-19-50-56.png | Bin .../{ => image}/2021-03-07-19-53-20.png | Bin .../{ => image}/2021-03-07-19-55-20.png | Bin .../{ => image}/2021-03-07-20-17-59.png | Bin .../{ => image}/2021-03-07-20-18-20.png | Bin .../{ => image}/2021-03-07-20-18-37.png | Bin .../{ => image}/2021-03-07-20-18-51.png | Bin .../{ => image}/2021-03-07-20-20-11.png | Bin .../{ => image}/2021-03-07-20-34-45.png | Bin .../{ => image}/2021-03-07-20-36-59.png | Bin .../{ => image}/2021-03-07-20-52-19.png | Bin .../{ => image}/2021-03-07-20-53-15.png | Bin .../{ => image}/2021-03-07-21-07-30.png | Bin .../{ => image}/2021-03-07-21-10-01.png | Bin .../{ => image}/2021-03-07-21-10-05.png | Bin .../{ => image}/2021-03-07-21-10-18.png | Bin .../{ => image}/2021-03-07-21-14-33.png | Bin .../{ => image}/2021-03-07-21-20-51.png | Bin .../{ => image}/2021-03-07-21-42-10.png | Bin .../{ => image}/2021-03-07-21-42-40.png | Bin .../{ => image}/2021-03-07-21-53-28.png | Bin .../{ => image}/2021-03-07-22-11-44.png | Bin .../{ => image}/2021-03-07-22-12-19.png | Bin .../{ => image}/2021-03-07-22-12-27.png | Bin .../{ => image}/2021-03-07-22-33-59.png | Bin .../{ => image}/2021-03-08-14-03-18.png | Bin .../{ => image}/2021-03-08-14-04-34.png | Bin .../{ => image}/2021-03-08-14-05-20.png | Bin .../{ => image}/2021-03-08-14-06-13.png | Bin .../{ => image}/2021-03-08-14-44-22.png | Bin .../{ => image}/2021-03-08-14-44-45.png | Bin .../{ => image}/2021-03-08-14-45-15.png | Bin .../{ => image}/2021-03-08-14-45-22.png | Bin .../{ => image}/2021-03-08-14-46-04.png | Bin .../{ => image}/2021-03-08-14-47-09.png | Bin .../{ => image}/2021-03-08-18-31-27.png | Bin .../{ => image}/2021-03-08-19-36-00.png | Bin C++/类设计者的工具/2 操作重载与类型转换.md | 2 +- C++/类设计者的工具/3 面向对象程序设计.md | 8 +- .../{ => image}/2021-03-06-23-22-55.png | Bin .../{ => image}/2021-03-07-14-26-29.png | Bin .../{ => image}/2021-03-07-15-55-33.png | Bin .../{ => image}/2021-03-07-15-58-59.png | Bin .../{ => image}/2021-03-07-16-00-43.png | Bin C++/面试/1.C++编译过程详解.md | 4 +- C++/面试/12.nullptr、NULL、0.md | 2 +- C++/面试/5.C++内存分配.md | 2 +- C++/面试/{ => image}/2021-03-03-19-44-57.png | Bin C++/面试/{ => image}/2021-03-03-19-49-02.png | Bin C++/面试/{ => image}/2021-03-04-10-30-35.png | Bin C++/面试/{ => image}/2021-03-05-17-00-11.png | Bin 数据结构/0 数据结构基础.md | 4 +- 数据结构/1 数组.md | 12 +- 数据结构/{trie.md => 10 字典树.md} | 0 数据结构/2 链表.md | 4 +- 数据结构/2.1 单链表.md | 4 +- 数据结构/2.2 双链表.md | 6 +- 数据结构/2.3 循环单链表.md | 4 +- 数据结构/2.4 循环双链表.md | 4 +- 数据结构/3 栈.md | 6 +- 数据结构/4 队列.md | 2 +- 数据结构/4.1 循环队列.md | 2 +- 数据结构/5 散列表.md | 4 +- .../{hash-search.md => 5.1 散列表查找.md} | 0 数据结构/6 树.md | 6 +- 数据结构/6.1 二叉树.md | 10 +- 数据结构/6.2 二叉搜索树.md | 4 +- 数据结构/6.3 平衡二叉树.md | 18 +- 数据结构/6.4 红黑树.md | 4 +- 数据结构/6.5 B树.md | 16 +- 数据结构/6.6 B+树.md | 16 +- 数据结构/6.8 堆树.md | 16 +- 数据结构/7 图.md | 18 +- 数据结构/{skiplist.md => 8 线性表查找.md} | 0 .../{linear-list-search.md => 9 跳表查找.md} | 0 数据结构/{ => image}/2021-03-12-17-07-01.png | Bin 数据结构/{ => image}/2021-03-12-20-47-17.png | Bin 数据结构/{ => image}/2021-03-12-20-55-32.png | Bin 数据结构/{ => image}/2021-03-12-20-57-19.png | Bin 数据结构/{ => image}/2021-03-12-20-57-51.png | Bin 数据结构/{ => image}/2021-03-12-20-58-14.png | Bin 数据结构/{ => image}/2021-03-12-20-58-23.png | Bin 数据结构/{ => image}/2021-03-12-21-00-33.png | Bin 数据结构/{ => image}/2021-03-12-21-01-53.png | Bin 数据结构/{ => image}/2021-03-12-21-08-07.png | Bin 数据结构/{ => image}/2021-03-12-21-14-50.png | Bin 数据结构/{ => image}/2021-03-12-21-14-57.png | Bin 数据结构/{ => image}/2021-03-12-21-21-07.png | Bin 数据结构/{ => image}/2021-03-12-21-22-43.png | Bin 数据结构/{ => image}/2021-03-12-21-29-39.png | Bin 数据结构/{ => image}/2021-03-12-21-29-49.png | Bin 数据结构/{ => image}/2021-03-12-21-36-39.png | Bin 数据结构/{ => image}/2021-03-12-21-43-29.png | Bin 数据结构/{ => image}/2021-03-12-22-05-59.png | Bin 数据结构/{ => image}/2021-03-12-22-07-20.png | Bin 数据结构/{ => image}/2021-03-12-22-10-38.png | Bin 数据结构/{ => image}/2021-03-12-22-12-08.png | Bin 数据结构/{ => image}/2021-03-12-22-12-52.png | Bin 数据结构/{ => image}/2021-03-12-22-16-50.png | Bin 数据结构/{ => image}/2021-03-12-22-17-33.png | Bin 数据结构/{ => image}/2021-03-12-22-46-59.png | Bin 数据结构/{ => image}/2021-03-12-22-48-28.png | Bin 数据结构/{ => image}/2021-03-12-22-53-43.png | Bin 数据结构/{ => image}/2021-03-12-23-35-36.png | Bin 数据结构/{ => image}/2021-03-12-23-39-19.png | Bin 数据结构/{ => image}/2021-03-12-23-47-41.png | Bin 数据结构/{ => image}/2021-03-12-23-47-46.png | Bin 数据结构/{ => image}/2021-03-12-23-47-52.png | Bin 数据结构/{ => image}/2021-03-12-23-51-37.png | Bin 数据结构/{ => image}/2021-03-12-23-51-43.png | Bin 数据结构/{ => image}/2021-03-12-23-51-51.png | Bin 数据结构/{ => image}/2021-03-12-23-58-07.png | Bin 数据结构/{ => image}/2021-03-12-23-58-14.png | Bin 数据结构/{ => image}/2021-03-12-23-58-20.png | Bin 数据结构/{ => image}/2021-03-12-23-58-29.png | Bin 数据结构/{ => image}/2021-03-13-00-03-01.png | Bin 数据结构/{ => image}/2021-03-13-00-03-07.png | Bin 数据结构/{ => image}/2021-03-13-00-03-13.png | Bin 数据结构/{ => image}/2021-03-13-00-03-30.png | Bin 数据结构/{ => image}/2021-03-13-00-07-04.png | Bin 数据结构/{ => image}/2021-03-13-00-15-09.png | Bin 数据结构/{ => image}/2021-03-13-00-15-45.png | Bin 数据结构/{ => image}/2021-03-13-00-16-39.png | Bin 数据结构/{ => image}/2021-03-13-00-18-58.png | Bin 数据结构/{ => image}/2021-03-13-00-23-57.png | Bin 数据结构/{ => image}/2021-03-13-00-25-14.png | Bin 数据结构/{ => image}/2021-03-13-00-29-43.png | Bin 数据结构/{ => image}/2021-03-13-00-30-58.png | Bin 数据结构/{ => image}/2021-03-13-12-51-08.png | Bin 数据结构/{ => image}/2021-03-13-12-53-35.png | Bin 数据结构/{ => image}/2021-03-13-14-06-44.png | Bin 数据结构/{ => image}/2021-03-13-14-09-24.png | Bin 数据结构/{ => image}/2021-03-13-14-10-25.png | Bin 数据结构/{ => image}/2021-03-13-14-10-40.png | Bin 数据结构/{ => image}/2021-03-13-14-25-55.png | Bin 数据结构/{ => image}/2021-03-13-14-28-34.png | Bin 数据结构/{ => image}/2021-03-13-14-29-50.png | Bin 数据结构/{ => image}/2021-03-13-14-30-35.png | Bin 数据结构/{ => image}/2021-03-13-14-43-51.png | Bin 数据结构/{ => image}/2021-03-13-14-44-34.png | Bin 数据结构/{ => image}/2021-03-13-15-23-14.png | Bin 数据结构/{ => image}/2021-03-13-15-23-24.png | Bin 数据结构/{ => image}/2021-03-13-15-25-15.png | Bin 数据结构/{ => image}/2021-03-13-15-31-06.png | Bin 数据结构/{ => image}/2021-03-13-15-43-40.png | Bin 数据结构/{ => image}/2021-03-13-15-43-53.png | Bin 数据结构/{ => image}/2021-03-13-16-01-31.png | Bin 数据结构/{ => image}/2021-03-13-16-02-28.png | Bin 数据结构/{ => image}/2021-03-13-16-12-10.png | Bin 数据结构/{ => image}/2021-03-13-16-28-06.png | Bin 数据结构/{ => image}/2021-03-13-16-32-02.png | Bin 数据结构/{ => image}/2021-03-13-16-32-17.png | Bin 数据结构/{ => image}/2021-03-13-17-02-40.png | Bin 数据结构/{ => image}/双链表的数据存储.png | Bin 数据结构/{ => image}/堆栈.png | Bin 数据结构/{ => image}/循环单向链表.png | Bin 数据结构/{ => image}/循环双向链表内存.png | Bin 数据结构/{ => image}/循环队列.png | Bin 数据结构/{ => image}/数据结构与算法.jpeg | Bin 数据结构/{ => image}/树.png | Bin 数据结构/sort.md | 923 ------------------ 271 files changed, 211 insertions(+), 1134 deletions(-) rename C++/C++基础/{ => image}/2021-03-03-17-45-17.png (100%) rename C++/C++基础/{ => image}/2021-03-04-10-42-02.png (100%) rename C++/C++基础/{ => image}/2021-03-04-10-48-02.png (100%) rename C++/C++基础/{ => image}/2021-03-04-11-40-28.png (100%) rename C++/C++基础/{ => image}/2021-03-04-11-41-01.png (100%) rename C++/C++基础/{ => image}/2021-03-04-11-43-30.png (100%) rename C++/C++基础/{ => image}/2021-03-04-14-18-52.png (100%) rename C++/C++基础/{ => image}/2021-03-04-14-38-39.png (100%) rename C++/C++基础/{ => image}/2021-03-04-15-29-22.png (100%) rename C++/C++基础/{ => image}/2021-03-04-15-42-38.png (100%) rename C++/C++基础/{ => image}/2021-03-04-17-20-26.png (100%) rename C++/C++基础/{ => image}/2021-03-04-17-25-36.png (100%) rename C++/C++基础/{ => image}/2021-03-04-17-26-34.png (100%) rename C++/C++基础/{ => image}/2021-03-04-17-30-19.png (100%) rename C++/C++基础/{ => image}/2021-03-04-17-39-49.png (100%) rename C++/C++基础/{ => image}/2021-03-04-20-43-17.png (100%) rename C++/C++基础/{ => image}/2021-03-04-20-43-53.png (100%) rename C++/C++基础/{ => image}/2021-03-04-21-04-30.png (100%) rename C++/C++基础/{ => image}/2021-03-04-21-05-54.png (100%) rename C++/C++基础/{ => image}/2021-03-04-21-57-59.png (100%) rename C++/C++基础/{ => image}/2021-03-04-22-45-04.png (100%) rename C++/C++基础/{ => image}/2021-03-05-11-26-54.png (100%) rename C++/C++基础/{ => image}/2021-03-05-11-28-27.png (100%) rename C++/C++基础/{ => image}/2021-03-05-13-42-02.png (100%) rename C++/C++基础/{ => image}/2021-03-05-15-23-34.png (100%) rename C++/C++基础/{ => image}/2021-03-05-15-25-52.png (100%) rename C++/C++基础/{ => image}/2021-03-05-15-26-11.png (100%) rename C++/标准库/{ => image}/2021-03-05-16-12-52.png (100%) rename C++/标准库/{ => image}/2021-03-05-16-28-34.png (100%) rename C++/标准库/{ => image}/2021-03-05-16-29-19.png (100%) rename C++/标准库/{ => image}/2021-03-05-17-30-07.png (100%) rename C++/标准库/{ => image}/2021-03-05-19-15-08.png (100%) rename C++/标准库/{ => image}/2021-03-05-19-42-28.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-17-45.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-17-55.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-26-48.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-29-29.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-37-12.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-40-51.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-42-30.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-54-47.png (100%) rename C++/标准库/{ => image}/2021-03-05-20-56-47.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-13-26.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-16-10.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-16-47.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-18-29.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-19-36.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-20-31.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-22-09.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-23-27.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-29-55.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-40-50.png (100%) rename C++/标准库/{ => image}/2021-03-05-21-41-56.png (100%) rename C++/标准库/{ => image}/2021-03-06-14-01-43.png (100%) rename C++/标准库/{ => image}/2021-03-06-14-23-15.png (100%) rename C++/标准库/{ => image}/2021-03-06-14-50-48.png (100%) rename C++/标准库/{ => image}/2021-03-06-14-51-10.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-13-07.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-23-17.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-27-21.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-28-46.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-39-37.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-41-19.png (100%) rename C++/标准库/{ => image}/2021-03-06-15-48-08.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-18-21.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-20-49.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-32-02.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-32-39.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-33-47.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-34-40.png (100%) rename C++/标准库/{ => image}/2021-03-06-16-48-05.png (100%) rename C++/标准库/{ => image}/2021-03-06-17-05-19.png (100%) rename C++/标准库/{ => image}/2021-03-06-17-06-13.png (100%) rename C++/标准库/{ => image}/2021-03-06-17-26-40.png (100%) rename C++/标准库/{ => image}/2021-03-06-17-43-51.png (100%) rename C++/标准库/{ => image}/2021-03-06-17-58-42.png (100%) rename C++/标准库/{ => image}/2021-03-06-18-09-20.png (100%) rename C++/标准库/{ => image}/2021-03-06-22-29-22.png (100%) rename C++/标准库/{ => image}/2021-03-06-22-34-11.png (100%) rename C++/标准库/{ => image}/2021-03-06-22-42-35.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-22-16.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-22-38.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-29-36.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-32-39.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-33-43.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-47-32.png (100%) rename C++/标准库/{ => image}/2021-03-07-17-48-43.png (100%) rename C++/标准库/{ => image}/2021-03-07-19-28-19.png (100%) rename C++/标准库/{ => image}/2021-03-07-19-46-47.png (100%) rename C++/标准库/{ => image}/2021-03-07-19-50-56.png (100%) rename C++/标准库/{ => image}/2021-03-07-19-53-20.png (100%) rename C++/标准库/{ => image}/2021-03-07-19-55-20.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-17-59.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-18-20.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-18-37.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-18-51.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-20-11.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-34-45.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-36-59.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-52-19.png (100%) rename C++/标准库/{ => image}/2021-03-07-20-53-15.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-07-30.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-10-01.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-10-05.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-10-18.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-14-33.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-20-51.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-42-10.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-42-40.png (100%) rename C++/标准库/{ => image}/2021-03-07-21-53-28.png (100%) rename C++/标准库/{ => image}/2021-03-07-22-11-44.png (100%) rename C++/标准库/{ => image}/2021-03-07-22-12-19.png (100%) rename C++/标准库/{ => image}/2021-03-07-22-12-27.png (100%) rename C++/标准库/{ => image}/2021-03-07-22-33-59.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-03-18.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-04-34.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-05-20.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-06-13.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-44-22.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-44-45.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-45-15.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-45-22.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-46-04.png (100%) rename C++/标准库/{ => image}/2021-03-08-14-47-09.png (100%) rename C++/标准库/{ => image}/2021-03-08-18-31-27.png (100%) rename C++/标准库/{ => image}/2021-03-08-19-36-00.png (100%) rename C++/类设计者的工具/{ => image}/2021-03-06-23-22-55.png (100%) rename C++/类设计者的工具/{ => image}/2021-03-07-14-26-29.png (100%) rename C++/类设计者的工具/{ => image}/2021-03-07-15-55-33.png (100%) rename C++/类设计者的工具/{ => image}/2021-03-07-15-58-59.png (100%) rename C++/类设计者的工具/{ => image}/2021-03-07-16-00-43.png (100%) rename C++/面试/{ => image}/2021-03-03-19-44-57.png (100%) rename C++/面试/{ => image}/2021-03-03-19-49-02.png (100%) rename C++/面试/{ => image}/2021-03-04-10-30-35.png (100%) rename C++/面试/{ => image}/2021-03-05-17-00-11.png (100%) rename 数据结构/{trie.md => 10 字典树.md} (100%) rename 数据结构/{hash-search.md => 5.1 散列表查找.md} (100%) rename 数据结构/{skiplist.md => 8 线性表查找.md} (100%) rename 数据结构/{linear-list-search.md => 9 跳表查找.md} (100%) rename 数据结构/{ => image}/2021-03-12-17-07-01.png (100%) rename 数据结构/{ => image}/2021-03-12-20-47-17.png (100%) rename 数据结构/{ => image}/2021-03-12-20-55-32.png (100%) rename 数据结构/{ => image}/2021-03-12-20-57-19.png (100%) rename 数据结构/{ => image}/2021-03-12-20-57-51.png (100%) rename 数据结构/{ => image}/2021-03-12-20-58-14.png (100%) rename 数据结构/{ => image}/2021-03-12-20-58-23.png (100%) rename 数据结构/{ => image}/2021-03-12-21-00-33.png (100%) rename 数据结构/{ => image}/2021-03-12-21-01-53.png (100%) rename 数据结构/{ => image}/2021-03-12-21-08-07.png (100%) rename 数据结构/{ => image}/2021-03-12-21-14-50.png (100%) rename 数据结构/{ => image}/2021-03-12-21-14-57.png (100%) rename 数据结构/{ => image}/2021-03-12-21-21-07.png (100%) rename 数据结构/{ => image}/2021-03-12-21-22-43.png (100%) rename 数据结构/{ => image}/2021-03-12-21-29-39.png (100%) rename 数据结构/{ => image}/2021-03-12-21-29-49.png (100%) rename 数据结构/{ => image}/2021-03-12-21-36-39.png (100%) rename 数据结构/{ => image}/2021-03-12-21-43-29.png (100%) rename 数据结构/{ => image}/2021-03-12-22-05-59.png (100%) rename 数据结构/{ => image}/2021-03-12-22-07-20.png (100%) rename 数据结构/{ => image}/2021-03-12-22-10-38.png (100%) rename 数据结构/{ => image}/2021-03-12-22-12-08.png (100%) rename 数据结构/{ => image}/2021-03-12-22-12-52.png (100%) rename 数据结构/{ => image}/2021-03-12-22-16-50.png (100%) rename 数据结构/{ => image}/2021-03-12-22-17-33.png (100%) rename 数据结构/{ => image}/2021-03-12-22-46-59.png (100%) rename 数据结构/{ => image}/2021-03-12-22-48-28.png (100%) rename 数据结构/{ => image}/2021-03-12-22-53-43.png (100%) rename 数据结构/{ => image}/2021-03-12-23-35-36.png (100%) rename 数据结构/{ => image}/2021-03-12-23-39-19.png (100%) rename 数据结构/{ => image}/2021-03-12-23-47-41.png (100%) rename 数据结构/{ => image}/2021-03-12-23-47-46.png (100%) rename 数据结构/{ => image}/2021-03-12-23-47-52.png (100%) rename 数据结构/{ => image}/2021-03-12-23-51-37.png (100%) rename 数据结构/{ => image}/2021-03-12-23-51-43.png (100%) rename 数据结构/{ => image}/2021-03-12-23-51-51.png (100%) rename 数据结构/{ => image}/2021-03-12-23-58-07.png (100%) rename 数据结构/{ => image}/2021-03-12-23-58-14.png (100%) rename 数据结构/{ => image}/2021-03-12-23-58-20.png (100%) rename 数据结构/{ => image}/2021-03-12-23-58-29.png (100%) rename 数据结构/{ => image}/2021-03-13-00-03-01.png (100%) rename 数据结构/{ => image}/2021-03-13-00-03-07.png (100%) rename 数据结构/{ => image}/2021-03-13-00-03-13.png (100%) rename 数据结构/{ => image}/2021-03-13-00-03-30.png (100%) rename 数据结构/{ => image}/2021-03-13-00-07-04.png (100%) rename 数据结构/{ => image}/2021-03-13-00-15-09.png (100%) rename 数据结构/{ => image}/2021-03-13-00-15-45.png (100%) rename 数据结构/{ => image}/2021-03-13-00-16-39.png (100%) rename 数据结构/{ => image}/2021-03-13-00-18-58.png (100%) rename 数据结构/{ => image}/2021-03-13-00-23-57.png (100%) rename 数据结构/{ => image}/2021-03-13-00-25-14.png (100%) rename 数据结构/{ => image}/2021-03-13-00-29-43.png (100%) rename 数据结构/{ => image}/2021-03-13-00-30-58.png (100%) rename 数据结构/{ => image}/2021-03-13-12-51-08.png (100%) rename 数据结构/{ => image}/2021-03-13-12-53-35.png (100%) rename 数据结构/{ => image}/2021-03-13-14-06-44.png (100%) rename 数据结构/{ => image}/2021-03-13-14-09-24.png (100%) rename 数据结构/{ => image}/2021-03-13-14-10-25.png (100%) rename 数据结构/{ => image}/2021-03-13-14-10-40.png (100%) rename 数据结构/{ => image}/2021-03-13-14-25-55.png (100%) rename 数据结构/{ => image}/2021-03-13-14-28-34.png (100%) rename 数据结构/{ => image}/2021-03-13-14-29-50.png (100%) rename 数据结构/{ => image}/2021-03-13-14-30-35.png (100%) rename 数据结构/{ => image}/2021-03-13-14-43-51.png (100%) rename 数据结构/{ => image}/2021-03-13-14-44-34.png (100%) rename 数据结构/{ => image}/2021-03-13-15-23-14.png (100%) rename 数据结构/{ => image}/2021-03-13-15-23-24.png (100%) rename 数据结构/{ => image}/2021-03-13-15-25-15.png (100%) rename 数据结构/{ => image}/2021-03-13-15-31-06.png (100%) rename 数据结构/{ => image}/2021-03-13-15-43-40.png (100%) rename 数据结构/{ => image}/2021-03-13-15-43-53.png (100%) rename 数据结构/{ => image}/2021-03-13-16-01-31.png (100%) rename 数据结构/{ => image}/2021-03-13-16-02-28.png (100%) rename 数据结构/{ => image}/2021-03-13-16-12-10.png (100%) rename 数据结构/{ => image}/2021-03-13-16-28-06.png (100%) rename 数据结构/{ => image}/2021-03-13-16-32-02.png (100%) rename 数据结构/{ => image}/2021-03-13-16-32-17.png (100%) rename 数据结构/{ => image}/2021-03-13-17-02-40.png (100%) rename 数据结构/{ => image}/双链表的数据存储.png (100%) rename 数据结构/{ => image}/堆栈.png (100%) rename 数据结构/{ => image}/循环单向链表.png (100%) rename 数据结构/{ => image}/循环双向链表内存.png (100%) rename 数据结构/{ => image}/循环队列.png (100%) rename 数据结构/{ => image}/数据结构与算法.jpeg (100%) rename 数据结构/{ => image}/树.png (100%) delete mode 100644 数据结构/sort.md diff --git a/C++/C++基础/1 变量和基本类型.md b/C++/C++基础/1 变量和基本类型.md index d935b38e..fcc93d8b 100644 --- a/C++/C++基础/1 变量和基本类型.md +++ b/C++/C++基础/1 变量和基本类型.md @@ -114,7 +114,7 @@ int j;//声明并定义了,申请了兑现该控件 ### 标识符与关键字。 -![](2021-03-03-17-45-17.png) +![](image/2021-03-03-17-45-17.png) ### 作用域 @@ -185,7 +185,7 @@ int \*\*p2 = &p1 - const 的值是常量表达式,则直接在头文件中定义`const a = 3*5`,include 这个头文件就能使用 const a 的值。 - const 的初始值通过函数计算得出,不是常量表达式;const 变量需要在不同的文件间共享,需要在头文件中 extern 声明,在 cpp 文件中进行定义。 - ![](2021-03-04-10-42-02.png) + ![](image/2021-03-04-10-42-02.png) ### const 引用 @@ -205,7 +205,7 @@ const int &r2 =i; const double * cptr = π ``` -![](2021-03-04-10-48-02.png) +![](image/2021-03-04-10-48-02.png) - 指向非常量的“指向常量的指针” diff --git a/C++/C++基础/2 字符串、向量和数组.md b/C++/C++基础/2 字符串、向量和数组.md index 3de444e5..8d0d03d0 100644 --- a/C++/C++基础/2 字符串、向量和数组.md +++ b/C++/C++基础/2 字符串、向量和数组.md @@ -21,9 +21,9 @@ using namespace ### 定义和初始化 string 对象 -![](2021-03-04-11-40-28.png) +![](image/2021-03-04-11-40-28.png) -![](2021-03-04-11-41-01.png) +![](image/2021-03-04-11-41-01.png) - 默认初始化 - 直接初始化 @@ -32,7 +32,7 @@ using namespace ### string 对象上的操作 -![](2021-03-04-11-43-30.png) +![](image/2021-03-04-11-43-30.png) ### 处理 string 对象中的字符 @@ -62,7 +62,7 @@ using namespace ### 定义和初始化 vector 对象 -![](2021-03-04-14-18-52.png) +![](image/2021-03-04-14-18-52.png) - 直接初始化。不适用等号,而是使用{} - 复制初始化。使用等号,进行初始化 @@ -82,7 +82,7 @@ using namespace ### 其他 vector 操作 -![](2021-03-04-14-38-39.png) +![](image/2021-03-04-14-38-39.png) - 使用下表访问 vector 元素的索引 - 不能使用下标形式向 vector 中添加元素 @@ -101,14 +101,14 @@ using namespace } ``` -![](2021-03-04-15-29-22.png) +![](image/2021-03-04-15-29-22.png) - 使用特定的函数返回容器对象(集合对象)的迭代器 - 使用解引用操作返回迭代器指针指向的元素 ### 迭代器运算 -![](2021-03-04-15-42-38.png) +![](image/2021-03-04-15-42-38.png) - 两个迭代器相减的结果使他们两个之间的距离,是一个整型常数,返回值不是一个迭代器。所以需要使用 beg+(end-beg)/2 来表示中间 mid 迭代器。end-beg 是一个整数。 @@ -249,4 +249,4 @@ for(int i=0;i t1{2,3.4,"yin"}; get<1>(t1);//获取t1的第一个元素 make_tuple(22,44,"helo");//元素类型自动推导 ``` -![](2021-03-07-17-33-43.png) +![](image/2021-03-07-17-33-43.png) ## 2 smart pointer 智能指针 ## 3 极值 @@ -75,13 +75,13 @@ int main(){ ``` #include ``` -![](2021-03-07-17-47-32.png) +![](image/2021-03-07-17-47-32.png) ### 交换 ``` #include ``` -![](2021-03-07-17-48-43.png) +![](image/2021-03-07-17-48-43.png) ## 6 class ratio编译期分数 @@ -129,11 +129,11 @@ hours aDay(24);//表示一天的duration ### 算数运算 * 赋值初始化可以使得它在不同的时间单位之间,快速转换。 -![](2021-03-07-21-42-10.png) +![](image/2021-03-07-21-42-10.png) ### 其他操作 -![](2021-03-07-21-42-40.png) +![](image/2021-03-07-21-42-40.png) ## 7.3 Clock和Timepoint @@ -145,7 +145,7 @@ hours aDay(24);//表示一天的duration ### Clock时钟 -![](2021-03-07-21-53-28.png) +![](image/2021-03-07-21-53-28.png) ### 系统提供了三个clock @@ -180,7 +180,7 @@ struct tm { ``` ### 常用操作 -![](2021-03-07-19-28-19.png) +![](image/2021-03-07-19-28-19.png) ### 常用函数 | 生成时间 | 函数 & 描述 | @@ -252,11 +252,11 @@ int main( ) ### cstddef -![](2021-03-07-22-11-44.png) +![](image/2021-03-07-22-11-44.png) ### cstdlib -![](2021-03-07-22-12-19.png) +![](image/2021-03-07-22-12-19.png) ### csting -![](2021-03-07-22-12-27.png) \ No newline at end of file +![](image/2021-03-07-22-12-27.png) \ No newline at end of file diff --git a/C++/标准库/11 lambda表达式.md b/C++/标准库/11 lambda表达式.md index dbb6173a..50b17134 100644 --- a/C++/标准库/11 lambda表达式.md +++ b/C++/标准库/11 lambda表达式.md @@ -89,7 +89,7 @@ cout< ``` ### 智能指针的基础操作 -![](2021-03-06-17-05-19.png) +![](image/2021-03-06-17-05-19.png) ### 智能指针陷阱 @@ -75,7 +75,7 @@ const int * pci = new const int(1024); ## 2 动态内存管理shared_ptr ### shared_ptr的操作 -![](2021-03-06-17-06-13.png) +![](image/2021-03-06-17-06-13.png) @@ -94,7 +94,7 @@ const int * pci = new const int(1024); * 一旦一个shared_ptr的计数器变为0.它就会自动释放自己所管理的内存。使用析构函数,销毁自身。 * 所以当它为局部变量,并且退出局部作用域后,所有的指针变量自动销毁,其所对应的动态分配的内存对象的引用计数就回变为零,此时动态内存会自动销毁。 -![](2021-03-06-17-26-40.png) +![](image/2021-03-06-17-26-40.png) ### shared_ptr和new申请内存 @@ -106,7 +106,7 @@ shared_ptr p3 = new int{42}; ``` ### shared_ptr的其他方法 * shared_ptr的赋值、权限转移和清空。 -![](2021-03-06-17-43-51.png) +![](image/2021-03-06-17-43-51.png) * 不能试用get初始化另外一个智能指针,也不能用get为智能指针赋值。 * 我们智能使用reset将智能指针指向其他的对象,不能将一个新的对象直接赋值给已经初始化的智能指针。reset函数会更新对象的引用计数,使其指向新的动态内存。 @@ -122,7 +122,7 @@ p.reset(new int(1024));//p指向一个新的对象。 ## 3 动态内存管理 unique_ptr -![](2021-03-06-17-58-42.png) +![](image/2021-03-06-17-58-42.png) * unique_ptr。某个时刻只能有一个unique_ptr只有一个给定的对象。当unique_ptr被销毁时,它所指向的对象也被销毁。 * unique_ptr需要绑定到一个new返回的指针上。直接将指针置为空,指针指向的对象就会被释放。可以使用delete释放unique_ptr * unique_ptr不支持普通的拷贝和赋值操作。但是可以拷贝或赋值一个将要被销毁的unique_ptr.例如return unique_ptr。实现控制权转移 @@ -140,7 +140,7 @@ unique_ptr n = m.release();//m放弃所有权转移给n * 不控制所指向对象生存期的智能指针。它指向一个由shared_ptr管理的对象。 * 将weak_ptr绑定到shared_ptr上不会改变shared_ptr的引用计数。当shared_ptr被销毁,对象就回被释放。 -![](2021-03-06-18-09-20.png) +![](image/2021-03-06-18-09-20.png) * 使用shared_ptr初始化weak_ptr @@ -185,7 +185,7 @@ delete [] pa; unique_ptr up(new int[[10]]); up.release(); ``` -![](2021-03-06-22-29-22.png) +![](image/2021-03-06-22-29-22.png) ## 5 allocator动态内存 @@ -196,7 +196,7 @@ up.release(); ### 操作 * 主要操作如下 -![](2021-03-06-22-34-11.png) +![](image/2021-03-06-22-34-11.png) ``` allcator alloc; @@ -208,5 +208,5 @@ alloc.deallocate(p,n) ``` ### allocator算法 * 标准库为allocator定义了两个伴随算法。 -![](2021-03-06-22-42-35.png) +![](image/2021-03-06-22-42-35.png) diff --git a/C++/标准库/2 容器.md b/C++/标准库/2 容器.md index 63ae1467..369636b9 100644 --- a/C++/标准库/2 容器.md +++ b/C++/标准库/2 容器.md @@ -14,17 +14,17 @@ ### C++ STL容器的实现 -![](2021-03-06-15-39-37.png) +![](image/2021-03-06-15-39-37.png) ### C++ STL容器概览 -![](2021-03-06-15-41-19.png) +![](image/2021-03-06-15-41-19.png) ## 2 所有容器的基础操作 ### 容器统一的操作 -![](2021-03-05-20-17-45.png) -![](2021-03-05-20-17-55.png) +![](image/2021-03-05-20-17-45.png) +![](image/2021-03-05-20-17-55.png) 主要包括六类 1. 构造函数和初始化(默认初始化、复制初始化、迭代器初始化、列表初始化) @@ -36,11 +36,11 @@ ### 容器的构造函数和初始化 -![](2021-03-05-20-26-48.png) +![](image/2021-03-05-20-26-48.png) ### 容器的赋值和交换 -![](2021-03-05-20-29-29.png) +![](image/2021-03-05-20-29-29.png) ### 容器大小 @@ -69,5 +69,5 @@ ### 管理容量的成员函数 -![](2021-03-05-21-13-26.png) +![](image/2021-03-05-21-13-26.png) diff --git a/C++/标准库/2.1 顺序容器.md b/C++/标准库/2.1 顺序容器.md index c977d82a..26830684 100644 --- a/C++/标准库/2.1 顺序容器.md +++ b/C++/标准库/2.1 顺序容器.md @@ -12,7 +12,7 @@ ### 向顺序容器中添加元素 -![](2021-03-05-20-37-12.png) +![](image/2021-03-05-20-37-12.png) * 在尾部添加元素**push_back(),emplace_back()** * 在头部添加元素**push_front(),emplace_front()** @@ -21,7 +21,7 @@ ### 在顺序容器中访问元素 -![](2021-03-05-20-40-51.png) +![](image/2021-03-05-20-40-51.png) * 也可以使用**迭代器**访问元素。 * **at**会进行安全检查抛出异常。 @@ -30,7 +30,7 @@ ### 在顺序容器中删除元素 -![](2021-03-05-20-42-30.png) +![](image/2021-03-05-20-42-30.png) * pop_back(),pop_front(); * erease(p),erase(b,e); @@ -45,7 +45,7 @@ ### 改变容器的大小 -![](2021-03-05-20-56-47.png) +![](image/2021-03-05-20-56-47.png) ## 1 array @@ -65,5 +65,5 @@ array arr = {1, 2, 3, 4, 5}; ## 4 foward_list ### foward_list的特殊操作 -![](2021-03-05-20-54-47.png) +![](image/2021-03-05-20-54-47.png) ## 5 list diff --git a/C++/标准库/2.2 关联容器.md b/C++/标准库/2.2 关联容器.md index 2599f3a8..f0ec00ed 100644 --- a/C++/标准库/2.2 关联容器.md +++ b/C++/标准库/2.2 关联容器.md @@ -18,7 +18,7 @@ * 要求不重复的关键字,允许重复的关键字。 * 按顺序保存元素。无序保存。 -![](2021-03-06-15-48-08.png) +![](image/2021-03-06-15-48-08.png) ### 关联容器的头文件 @@ -95,14 +95,14 @@ pair author{'James","joyce"}; * pair上的操作 -![](2021-03-06-16-18-21.png) +![](image/2021-03-06-16-18-21.png) ## 2 关联容器的基础操作 ### 关联容器额外的类型名 -![](2021-03-06-16-20-49.png) +![](image/2021-03-06-16-20-49.png) ### 关联容器的迭代器和元素遍历 @@ -123,19 +123,19 @@ pair author{'James","joyce"}; ### 添加元素 -![](2021-03-06-16-32-02.png) +![](image/2021-03-06-16-32-02.png) ### 删除元素 -![](2021-03-06-16-32-39.png) +![](image/2021-03-06-16-32-39.png) ### map下标操作 -![](2021-03-06-16-33-47.png) +![](image/2021-03-06-16-33-47.png) ### 访问元素 -![](2021-03-06-16-34-40.png) +![](image/2021-03-06-16-34-40.png) ## 3 无序关联容器的基础操作 @@ -151,6 +151,6 @@ pair author{'James","joyce"}; ### 管理桶 * 无序关联容器相对于普通关联容器的特殊操作。 -![](2021-03-06-16-48-05.png) +![](image/2021-03-06-16-48-05.png) diff --git a/C++/标准库/2.3 容器适配器.md b/C++/标准库/2.3 容器适配器.md index b6b7a544..22eb37a0 100644 --- a/C++/标准库/2.3 容器适配器.md +++ b/C++/标准库/2.3 容器适配器.md @@ -14,7 +14,7 @@ ### 容器适配器的操作 -![](2021-03-05-21-29-55.png) +![](image/2021-03-05-21-29-55.png) * 可以用顺序容器初始化适配器。使用的是顺序容器的拷贝。 @@ -24,7 +24,7 @@ ### 特有操作 -![](2021-03-05-21-40-50.png) +![](image/2021-03-05-21-40-50.png) ## 2 queue和priority_queue @@ -35,7 +35,7 @@ ### 特有操作 -![](2021-03-05-21-41-56.png) +![](image/2021-03-05-21-41-56.png) ## 3 bitset特殊容器 @@ -52,11 +52,11 @@ bitset<32> bitvec(1U); ``` * 编号从0开始的二进制位被称为低位。编号31结束的二进制位被称为高位。 -![](2021-03-07-19-46-47.png) +![](image/2021-03-07-19-46-47.png) ### bitset操作 * bitset支持位运算 -![](2021-03-07-19-50-56.png) +![](image/2021-03-07-19-50-56.png) diff --git a/C++/标准库/3 迭代器.md b/C++/标准库/3 迭代器.md index 9833286c..b875a8f3 100644 --- a/C++/标准库/3 迭代器.md +++ b/C++/标准库/3 迭代器.md @@ -62,9 +62,9 @@ cend() 接受一个容器,生成迭代器,能够向容器中的指定位置添加元素。 -![](2021-03-06-14-23-15.png) +![](image/2021-03-06-14-23-15.png) -![](2021-03-07-22-33-59.png) +![](image/2021-03-07-22-33-59.png) * back_inserter:创建一个push_back迭代器 * front_inserter:创建一个push_front迭代器 * inserter:创建一个insert迭代器。接受一个指向容器的迭代器。元素将被插入到给定迭代器所表示的元素之前。 @@ -98,7 +98,7 @@ int main(){ * istream_iterator:读取输入流。可以为任何定义了输入运算符的类创建迭代器对象。 -![](2021-03-06-14-50-48.png) +![](image/2021-03-06-14-50-48.png) ``` /* @@ -124,7 +124,7 @@ int main(){ * ostream_iterator:读取输出流。可以为任何创建了输出运算符的类,创建输出流迭代器。 -![](2021-03-06-14-51-10.png) +![](image/2021-03-06-14-51-10.png) ``` ostream_iterator out_iter(cout,"\n"); diff --git a/C++/标准库/4 算法.md b/C++/标准库/4 算法.md index ac9d45c8..00986297 100644 --- a/C++/标准库/4 算法.md +++ b/C++/标准库/4 算法.md @@ -287,7 +287,7 @@ binary|判断函数,返回true/false ### 五类迭代器 泛型算法只要能够提供五个迭代器类别,所有到的泛型算法都能够执行。每个算法都会对他的每个迭代器指明提供哪类迭代器。 -![](2021-03-06-15-13-07.png) +![](image/2021-03-06-15-13-07.png) ### 输入迭代器 @@ -322,7 +322,7 @@ binary|判断函数,返回true/false * 接受单个目标迭代器的算法 * 接受第二个输入序列的算法 -![](2021-03-06-15-23-17.png) +![](image/2021-03-06-15-23-17.png) ### 算法的命名规范 * 算法有多个重载版本 @@ -337,11 +337,11 @@ binary|判断函数,返回true/false * 成员函数中的算法 -![](2021-03-06-15-27-21.png) +![](image/2021-03-06-15-27-21.png) * splice算法 -![](2021-03-06-15-28-46.png) +![](image/2021-03-06-15-28-46.png) diff --git a/C++/标准库/5 字符串.md b/C++/标准库/5 字符串.md index b823f41f..8152bcca 100644 --- a/C++/标准库/5 字符串.md +++ b/C++/标准库/5 字符串.md @@ -211,28 +211,28 @@ int main() ### string的构造方法 -![](2021-03-05-21-16-10.png) +![](image/2021-03-05-21-16-10.png) ### 子字符串操作 -![](2021-03-05-21-16-47.png) +![](image/2021-03-05-21-16-47.png) ### 修改string的操作 -![](2021-03-05-21-20-31.png) +![](image/2021-03-05-21-20-31.png) ### string搜索操作 -![](2021-03-05-21-19-36.png) +![](image/2021-03-05-21-19-36.png) ### compare函数 -![](2021-03-05-21-22-09.png) +![](image/2021-03-05-21-22-09.png) ### 数值转换 -![](2021-03-05-21-23-27.png) +![](image/2021-03-05-21-23-27.png) diff --git a/C++/标准库/6 正则表达式.md b/C++/标准库/6 正则表达式.md index 18333b0f..76eab574 100644 --- a/C++/标准库/6 正则表达式.md +++ b/C++/标准库/6 正则表达式.md @@ -12,23 +12,23 @@ ``` ### 库组件 -![](2021-03-07-19-53-20.png) +![](image/2021-03-07-19-53-20.png) ### 正则表达式对象 -![](2021-03-07-20-52-19.png) +![](image/2021-03-07-20-52-19.png) ### 操作 -![](2021-03-07-19-55-20.png) +![](image/2021-03-07-19-55-20.png) -![](2021-03-07-20-34-45.png) +![](image/2021-03-07-20-34-45.png) ```C++ #include @@ -56,11 +56,11 @@ int main(){ ### regex迭代器选择 -![](2021-03-07-20-36-59.png) +![](image/2021-03-07-20-36-59.png) ### regex迭代器使用,针对string -![](2021-03-07-20-53-15.png) +![](image/2021-03-07-20-53-15.png) ``` #include @@ -93,14 +93,14 @@ int main(){ ``` ### smatch的操作,针对string -![](2021-03-07-21-07-30.png) +![](image/2021-03-07-21-07-30.png) ## 1.3 子表达式的正则匹配 -![](2021-03-07-21-10-18.png) +![](image/2021-03-07-21-10-18.png) ## 1.4 regex_replace -![](2021-03-07-21-10-01.png) +![](image/2021-03-07-21-10-01.png) ## 2 正则表达式规则 主要包括四类 @@ -112,23 +112,23 @@ int main(){ ### 2.1 字符类 -![](2021-03-07-20-17-59.png) +![](image/2021-03-07-20-17-59.png) ### 2.2 数量限定符 -![](2021-03-07-20-18-20.png) +![](image/2021-03-07-20-18-20.png) ### 2.3 位置限定符 -![](2021-03-07-20-18-37.png) +![](image/2021-03-07-20-18-37.png) ### 2.4 特殊符号 -![](2021-03-07-20-18-51.png) +![](image/2021-03-07-20-18-51.png) ### 2.5 普通字符集及其替换 -![](2021-03-07-20-20-11.png) +![](image/2021-03-07-20-20-11.png) ### 2.6 贪婪模式与非贪婪模式 diff --git a/C++/标准库/7 IO.md b/C++/标准库/7 IO.md index b4ab2ea4..6c6fc283 100644 --- a/C++/标准库/7 IO.md +++ b/C++/标准库/7 IO.md @@ -1,10 +1,10 @@ # IO > IO关系图 -![](2021-03-05-16-12-52.png) +![](image/2021-03-05-16-12-52.png) > IO 类的继承关系图 -![](2021-03-05-16-29-19.png) +![](image/2021-03-05-16-29-19.png) > 目录 > * 输入输出流iostream @@ -20,7 +20,7 @@ > 继承自`basic_ios`和`basic_ios_base`基类 * 用来记录stream可能出现的状态。 -![](2021-03-05-19-15-08.png) +![](image/2021-03-05-19-15-08.png) * 使用iostate对象来记录和管理io的状态 * `>> <<`流运算符(流函数)会返回io的运行状态,如果成功,则会返回true,否则返回false @@ -203,7 +203,7 @@ ch=getchar(); //不能写成getchar(ch); * close关闭关联文件 ### 文件模式 -![](2021-03-05-19-42-28.png) +![](image/2021-03-05-19-42-28.png) ### 实例 ```C++ diff --git a/C++/标准库/8 数值.md b/C++/标准库/8 数值.md index 621d6a4e..519db6ba 100644 --- a/C++/标准库/8 数值.md +++ b/C++/标准库/8 数值.md @@ -18,8 +18,8 @@ ### 随机数引擎的操作 -![](2021-03-07-21-14-33.png) -![](2021-03-08-14-04-34.png) +![](image/2021-03-07-21-14-33.png) +![](image/2021-03-08-14-04-34.png) * 编译器会自动选择一个随机数引擎作为default_random_engine的类型的引擎。 ``` default_random_engine e; @@ -28,8 +28,8 @@ ### 随机数分布的操作 -![](2021-03-07-21-20-51.png) -![](2021-03-08-14-06-13.png) +![](image/2021-03-07-21-20-51.png) +![](image/2021-03-08-14-06-13.png) * 需要给默认的随机数引擎选择一个分布序列。 ``` uniform_int_distribution u<0,9>; @@ -58,13 +58,13 @@ int main( ){ ## 1.2 随机分布引擎 C++提供了16个随机数引擎。 -![](2021-03-08-14-03-18.png) +![](image/2021-03-08-14-03-18.png) * default_random_engine ## 1.3 随机分布类型 C++提供了五大类随机分布 -![](2021-03-08-14-05-20.png) +![](image/2021-03-08-14-05-20.png) * uniform_int_distribution(up_bound,down_bound)均匀整数分布T:short int long longlong。指定均匀分布的最大最小值。 @@ -86,21 +86,21 @@ srand((int)time(0)); // 产生随机种子把0换成NULL也行 ### 常用操作 -![](2021-03-08-14-44-22.png) +![](image/2021-03-08-14-44-22.png) ### 数值访问 -![](2021-03-08-14-44-45.png) +![](image/2021-03-08-14-44-45.png) ### 算数运算 -![](2021-03-08-14-45-15.png) +![](image/2021-03-08-14-45-15.png) ### 输入输出运算 -![](2021-03-08-14-45-22.png) +![](image/2021-03-08-14-45-22.png) ### 超越函数 -![](2021-03-08-14-46-04.png) +![](image/2021-03-08-14-46-04.png) ## 3 全局数值函数 @@ -113,7 +113,7 @@ srand((int)time(0)); // 产生随机种子把0换成NULL也行 ### 数值函数 -![](2021-03-08-14-47-09.png) +![](image/2021-03-08-14-47-09.png) ## 4 Valarray 数值数组 \ No newline at end of file diff --git a/C++/标准库/9 线程.md b/C++/标准库/9 线程.md index f57f3b0f..f3284231 100644 --- a/C++/标准库/9 线程.md +++ b/C++/标准库/9 线程.md @@ -444,7 +444,7 @@ mutex | 返回指向关联互斥的指针 owns_lock | 测试锁是否占有其关联互斥 operator bool | 测试锁是否占有其关联互斥 -![](2021-03-08-18-31-27.png) +![](image/2021-03-08-18-31-27.png) ``` void shared_print(string msg, int id) { @@ -497,7 +497,7 @@ void shared_print(string msg, int id) { > 对于第一种情况:condition_varaiblewait操作能够解锁等待信号量。当信号量来到时,加锁执行操作,然后解锁,退出。当信号量来到时,加锁,但是第二个参数的内容发现是虚假信号,能够继续解锁等待信号量。 -![](2021-03-08-19-36-00.png) +![](image/2021-03-08-19-36-00.png) ### condition_variable操作 diff --git a/C++/标准库/2021-03-05-16-12-52.png b/C++/标准库/image/2021-03-05-16-12-52.png similarity index 100% rename from C++/标准库/2021-03-05-16-12-52.png rename to C++/标准库/image/2021-03-05-16-12-52.png diff --git a/C++/标准库/2021-03-05-16-28-34.png b/C++/标准库/image/2021-03-05-16-28-34.png similarity index 100% rename from C++/标准库/2021-03-05-16-28-34.png rename to C++/标准库/image/2021-03-05-16-28-34.png diff --git a/C++/标准库/2021-03-05-16-29-19.png b/C++/标准库/image/2021-03-05-16-29-19.png similarity index 100% rename from C++/标准库/2021-03-05-16-29-19.png rename to C++/标准库/image/2021-03-05-16-29-19.png diff --git a/C++/标准库/2021-03-05-17-30-07.png b/C++/标准库/image/2021-03-05-17-30-07.png similarity index 100% rename from C++/标准库/2021-03-05-17-30-07.png rename to C++/标准库/image/2021-03-05-17-30-07.png diff --git a/C++/标准库/2021-03-05-19-15-08.png b/C++/标准库/image/2021-03-05-19-15-08.png similarity index 100% rename from C++/标准库/2021-03-05-19-15-08.png rename to C++/标准库/image/2021-03-05-19-15-08.png diff --git a/C++/标准库/2021-03-05-19-42-28.png b/C++/标准库/image/2021-03-05-19-42-28.png similarity index 100% rename from C++/标准库/2021-03-05-19-42-28.png rename to C++/标准库/image/2021-03-05-19-42-28.png diff --git a/C++/标准库/2021-03-05-20-17-45.png b/C++/标准库/image/2021-03-05-20-17-45.png similarity index 100% rename from C++/标准库/2021-03-05-20-17-45.png rename to C++/标准库/image/2021-03-05-20-17-45.png diff --git a/C++/标准库/2021-03-05-20-17-55.png b/C++/标准库/image/2021-03-05-20-17-55.png similarity index 100% rename from C++/标准库/2021-03-05-20-17-55.png rename to C++/标准库/image/2021-03-05-20-17-55.png diff --git a/C++/标准库/2021-03-05-20-26-48.png b/C++/标准库/image/2021-03-05-20-26-48.png similarity index 100% rename from C++/标准库/2021-03-05-20-26-48.png rename to C++/标准库/image/2021-03-05-20-26-48.png diff --git a/C++/标准库/2021-03-05-20-29-29.png b/C++/标准库/image/2021-03-05-20-29-29.png similarity index 100% rename from C++/标准库/2021-03-05-20-29-29.png rename to C++/标准库/image/2021-03-05-20-29-29.png diff --git a/C++/标准库/2021-03-05-20-37-12.png b/C++/标准库/image/2021-03-05-20-37-12.png similarity index 100% rename from C++/标准库/2021-03-05-20-37-12.png rename to C++/标准库/image/2021-03-05-20-37-12.png diff --git a/C++/标准库/2021-03-05-20-40-51.png b/C++/标准库/image/2021-03-05-20-40-51.png similarity index 100% rename from C++/标准库/2021-03-05-20-40-51.png rename to C++/标准库/image/2021-03-05-20-40-51.png diff --git a/C++/标准库/2021-03-05-20-42-30.png b/C++/标准库/image/2021-03-05-20-42-30.png similarity index 100% rename from C++/标准库/2021-03-05-20-42-30.png rename to C++/标准库/image/2021-03-05-20-42-30.png diff --git a/C++/标准库/2021-03-05-20-54-47.png b/C++/标准库/image/2021-03-05-20-54-47.png similarity index 100% rename from C++/标准库/2021-03-05-20-54-47.png rename to C++/标准库/image/2021-03-05-20-54-47.png diff --git a/C++/标准库/2021-03-05-20-56-47.png b/C++/标准库/image/2021-03-05-20-56-47.png similarity index 100% rename from C++/标准库/2021-03-05-20-56-47.png rename to C++/标准库/image/2021-03-05-20-56-47.png diff --git a/C++/标准库/2021-03-05-21-13-26.png b/C++/标准库/image/2021-03-05-21-13-26.png similarity index 100% rename from C++/标准库/2021-03-05-21-13-26.png rename to C++/标准库/image/2021-03-05-21-13-26.png diff --git a/C++/标准库/2021-03-05-21-16-10.png b/C++/标准库/image/2021-03-05-21-16-10.png similarity index 100% rename from C++/标准库/2021-03-05-21-16-10.png rename to C++/标准库/image/2021-03-05-21-16-10.png diff --git a/C++/标准库/2021-03-05-21-16-47.png b/C++/标准库/image/2021-03-05-21-16-47.png similarity index 100% rename from C++/标准库/2021-03-05-21-16-47.png rename to C++/标准库/image/2021-03-05-21-16-47.png diff --git a/C++/标准库/2021-03-05-21-18-29.png b/C++/标准库/image/2021-03-05-21-18-29.png similarity index 100% rename from C++/标准库/2021-03-05-21-18-29.png rename to C++/标准库/image/2021-03-05-21-18-29.png diff --git a/C++/标准库/2021-03-05-21-19-36.png b/C++/标准库/image/2021-03-05-21-19-36.png similarity index 100% rename from C++/标准库/2021-03-05-21-19-36.png rename to C++/标准库/image/2021-03-05-21-19-36.png diff --git a/C++/标准库/2021-03-05-21-20-31.png b/C++/标准库/image/2021-03-05-21-20-31.png similarity index 100% rename from C++/标准库/2021-03-05-21-20-31.png rename to C++/标准库/image/2021-03-05-21-20-31.png diff --git a/C++/标准库/2021-03-05-21-22-09.png b/C++/标准库/image/2021-03-05-21-22-09.png similarity index 100% rename from C++/标准库/2021-03-05-21-22-09.png rename to C++/标准库/image/2021-03-05-21-22-09.png diff --git a/C++/标准库/2021-03-05-21-23-27.png b/C++/标准库/image/2021-03-05-21-23-27.png similarity index 100% rename from C++/标准库/2021-03-05-21-23-27.png rename to C++/标准库/image/2021-03-05-21-23-27.png diff --git a/C++/标准库/2021-03-05-21-29-55.png b/C++/标准库/image/2021-03-05-21-29-55.png similarity index 100% rename from C++/标准库/2021-03-05-21-29-55.png rename to C++/标准库/image/2021-03-05-21-29-55.png diff --git a/C++/标准库/2021-03-05-21-40-50.png b/C++/标准库/image/2021-03-05-21-40-50.png similarity index 100% rename from C++/标准库/2021-03-05-21-40-50.png rename to C++/标准库/image/2021-03-05-21-40-50.png diff --git a/C++/标准库/2021-03-05-21-41-56.png b/C++/标准库/image/2021-03-05-21-41-56.png similarity index 100% rename from C++/标准库/2021-03-05-21-41-56.png rename to C++/标准库/image/2021-03-05-21-41-56.png diff --git a/C++/标准库/2021-03-06-14-01-43.png b/C++/标准库/image/2021-03-06-14-01-43.png similarity index 100% rename from C++/标准库/2021-03-06-14-01-43.png rename to C++/标准库/image/2021-03-06-14-01-43.png diff --git a/C++/标准库/2021-03-06-14-23-15.png b/C++/标准库/image/2021-03-06-14-23-15.png similarity index 100% rename from C++/标准库/2021-03-06-14-23-15.png rename to C++/标准库/image/2021-03-06-14-23-15.png diff --git a/C++/标准库/2021-03-06-14-50-48.png b/C++/标准库/image/2021-03-06-14-50-48.png similarity index 100% rename from C++/标准库/2021-03-06-14-50-48.png rename to C++/标准库/image/2021-03-06-14-50-48.png diff --git a/C++/标准库/2021-03-06-14-51-10.png b/C++/标准库/image/2021-03-06-14-51-10.png similarity index 100% rename from C++/标准库/2021-03-06-14-51-10.png rename to C++/标准库/image/2021-03-06-14-51-10.png diff --git a/C++/标准库/2021-03-06-15-13-07.png b/C++/标准库/image/2021-03-06-15-13-07.png similarity index 100% rename from C++/标准库/2021-03-06-15-13-07.png rename to C++/标准库/image/2021-03-06-15-13-07.png diff --git a/C++/标准库/2021-03-06-15-23-17.png b/C++/标准库/image/2021-03-06-15-23-17.png similarity index 100% rename from C++/标准库/2021-03-06-15-23-17.png rename to C++/标准库/image/2021-03-06-15-23-17.png diff --git a/C++/标准库/2021-03-06-15-27-21.png b/C++/标准库/image/2021-03-06-15-27-21.png similarity index 100% rename from C++/标准库/2021-03-06-15-27-21.png rename to C++/标准库/image/2021-03-06-15-27-21.png diff --git a/C++/标准库/2021-03-06-15-28-46.png b/C++/标准库/image/2021-03-06-15-28-46.png similarity index 100% rename from C++/标准库/2021-03-06-15-28-46.png rename to C++/标准库/image/2021-03-06-15-28-46.png diff --git a/C++/标准库/2021-03-06-15-39-37.png b/C++/标准库/image/2021-03-06-15-39-37.png similarity index 100% rename from C++/标准库/2021-03-06-15-39-37.png rename to C++/标准库/image/2021-03-06-15-39-37.png diff --git a/C++/标准库/2021-03-06-15-41-19.png b/C++/标准库/image/2021-03-06-15-41-19.png similarity index 100% rename from C++/标准库/2021-03-06-15-41-19.png rename to C++/标准库/image/2021-03-06-15-41-19.png diff --git a/C++/标准库/2021-03-06-15-48-08.png b/C++/标准库/image/2021-03-06-15-48-08.png similarity index 100% rename from C++/标准库/2021-03-06-15-48-08.png rename to C++/标准库/image/2021-03-06-15-48-08.png diff --git a/C++/标准库/2021-03-06-16-18-21.png b/C++/标准库/image/2021-03-06-16-18-21.png similarity index 100% rename from C++/标准库/2021-03-06-16-18-21.png rename to C++/标准库/image/2021-03-06-16-18-21.png diff --git a/C++/标准库/2021-03-06-16-20-49.png b/C++/标准库/image/2021-03-06-16-20-49.png similarity index 100% rename from C++/标准库/2021-03-06-16-20-49.png rename to C++/标准库/image/2021-03-06-16-20-49.png diff --git a/C++/标准库/2021-03-06-16-32-02.png b/C++/标准库/image/2021-03-06-16-32-02.png similarity index 100% rename from C++/标准库/2021-03-06-16-32-02.png rename to C++/标准库/image/2021-03-06-16-32-02.png diff --git a/C++/标准库/2021-03-06-16-32-39.png b/C++/标准库/image/2021-03-06-16-32-39.png similarity index 100% rename from C++/标准库/2021-03-06-16-32-39.png rename to C++/标准库/image/2021-03-06-16-32-39.png diff --git a/C++/标准库/2021-03-06-16-33-47.png b/C++/标准库/image/2021-03-06-16-33-47.png similarity index 100% rename from C++/标准库/2021-03-06-16-33-47.png rename to C++/标准库/image/2021-03-06-16-33-47.png diff --git a/C++/标准库/2021-03-06-16-34-40.png b/C++/标准库/image/2021-03-06-16-34-40.png similarity index 100% rename from C++/标准库/2021-03-06-16-34-40.png rename to C++/标准库/image/2021-03-06-16-34-40.png diff --git a/C++/标准库/2021-03-06-16-48-05.png b/C++/标准库/image/2021-03-06-16-48-05.png similarity index 100% rename from C++/标准库/2021-03-06-16-48-05.png rename to C++/标准库/image/2021-03-06-16-48-05.png diff --git a/C++/标准库/2021-03-06-17-05-19.png b/C++/标准库/image/2021-03-06-17-05-19.png similarity index 100% rename from C++/标准库/2021-03-06-17-05-19.png rename to C++/标准库/image/2021-03-06-17-05-19.png diff --git a/C++/标准库/2021-03-06-17-06-13.png b/C++/标准库/image/2021-03-06-17-06-13.png similarity index 100% rename from C++/标准库/2021-03-06-17-06-13.png rename to C++/标准库/image/2021-03-06-17-06-13.png diff --git a/C++/标准库/2021-03-06-17-26-40.png b/C++/标准库/image/2021-03-06-17-26-40.png similarity index 100% rename from C++/标准库/2021-03-06-17-26-40.png rename to C++/标准库/image/2021-03-06-17-26-40.png diff --git a/C++/标准库/2021-03-06-17-43-51.png b/C++/标准库/image/2021-03-06-17-43-51.png similarity index 100% rename from C++/标准库/2021-03-06-17-43-51.png rename to C++/标准库/image/2021-03-06-17-43-51.png diff --git a/C++/标准库/2021-03-06-17-58-42.png b/C++/标准库/image/2021-03-06-17-58-42.png similarity index 100% rename from C++/标准库/2021-03-06-17-58-42.png rename to C++/标准库/image/2021-03-06-17-58-42.png diff --git a/C++/标准库/2021-03-06-18-09-20.png b/C++/标准库/image/2021-03-06-18-09-20.png similarity index 100% rename from C++/标准库/2021-03-06-18-09-20.png rename to C++/标准库/image/2021-03-06-18-09-20.png diff --git a/C++/标准库/2021-03-06-22-29-22.png b/C++/标准库/image/2021-03-06-22-29-22.png similarity index 100% rename from C++/标准库/2021-03-06-22-29-22.png rename to C++/标准库/image/2021-03-06-22-29-22.png diff --git a/C++/标准库/2021-03-06-22-34-11.png b/C++/标准库/image/2021-03-06-22-34-11.png similarity index 100% rename from C++/标准库/2021-03-06-22-34-11.png rename to C++/标准库/image/2021-03-06-22-34-11.png diff --git a/C++/标准库/2021-03-06-22-42-35.png b/C++/标准库/image/2021-03-06-22-42-35.png similarity index 100% rename from C++/标准库/2021-03-06-22-42-35.png rename to C++/标准库/image/2021-03-06-22-42-35.png diff --git a/C++/标准库/2021-03-07-17-22-16.png b/C++/标准库/image/2021-03-07-17-22-16.png similarity index 100% rename from C++/标准库/2021-03-07-17-22-16.png rename to C++/标准库/image/2021-03-07-17-22-16.png diff --git a/C++/标准库/2021-03-07-17-22-38.png b/C++/标准库/image/2021-03-07-17-22-38.png similarity index 100% rename from C++/标准库/2021-03-07-17-22-38.png rename to C++/标准库/image/2021-03-07-17-22-38.png diff --git a/C++/标准库/2021-03-07-17-29-36.png b/C++/标准库/image/2021-03-07-17-29-36.png similarity index 100% rename from C++/标准库/2021-03-07-17-29-36.png rename to C++/标准库/image/2021-03-07-17-29-36.png diff --git a/C++/标准库/2021-03-07-17-32-39.png b/C++/标准库/image/2021-03-07-17-32-39.png similarity index 100% rename from C++/标准库/2021-03-07-17-32-39.png rename to C++/标准库/image/2021-03-07-17-32-39.png diff --git a/C++/标准库/2021-03-07-17-33-43.png b/C++/标准库/image/2021-03-07-17-33-43.png similarity index 100% rename from C++/标准库/2021-03-07-17-33-43.png rename to C++/标准库/image/2021-03-07-17-33-43.png diff --git a/C++/标准库/2021-03-07-17-47-32.png b/C++/标准库/image/2021-03-07-17-47-32.png similarity index 100% rename from C++/标准库/2021-03-07-17-47-32.png rename to C++/标准库/image/2021-03-07-17-47-32.png diff --git a/C++/标准库/2021-03-07-17-48-43.png b/C++/标准库/image/2021-03-07-17-48-43.png similarity index 100% rename from C++/标准库/2021-03-07-17-48-43.png rename to C++/标准库/image/2021-03-07-17-48-43.png diff --git a/C++/标准库/2021-03-07-19-28-19.png b/C++/标准库/image/2021-03-07-19-28-19.png similarity index 100% rename from C++/标准库/2021-03-07-19-28-19.png rename to C++/标准库/image/2021-03-07-19-28-19.png diff --git a/C++/标准库/2021-03-07-19-46-47.png b/C++/标准库/image/2021-03-07-19-46-47.png similarity index 100% rename from C++/标准库/2021-03-07-19-46-47.png rename to C++/标准库/image/2021-03-07-19-46-47.png diff --git a/C++/标准库/2021-03-07-19-50-56.png b/C++/标准库/image/2021-03-07-19-50-56.png similarity index 100% rename from C++/标准库/2021-03-07-19-50-56.png rename to C++/标准库/image/2021-03-07-19-50-56.png diff --git a/C++/标准库/2021-03-07-19-53-20.png b/C++/标准库/image/2021-03-07-19-53-20.png similarity index 100% rename from C++/标准库/2021-03-07-19-53-20.png rename to C++/标准库/image/2021-03-07-19-53-20.png diff --git a/C++/标准库/2021-03-07-19-55-20.png b/C++/标准库/image/2021-03-07-19-55-20.png similarity index 100% rename from C++/标准库/2021-03-07-19-55-20.png rename to C++/标准库/image/2021-03-07-19-55-20.png diff --git a/C++/标准库/2021-03-07-20-17-59.png b/C++/标准库/image/2021-03-07-20-17-59.png similarity index 100% rename from C++/标准库/2021-03-07-20-17-59.png rename to C++/标准库/image/2021-03-07-20-17-59.png diff --git a/C++/标准库/2021-03-07-20-18-20.png b/C++/标准库/image/2021-03-07-20-18-20.png similarity index 100% rename from C++/标准库/2021-03-07-20-18-20.png rename to C++/标准库/image/2021-03-07-20-18-20.png diff --git a/C++/标准库/2021-03-07-20-18-37.png b/C++/标准库/image/2021-03-07-20-18-37.png similarity index 100% rename from C++/标准库/2021-03-07-20-18-37.png rename to C++/标准库/image/2021-03-07-20-18-37.png diff --git a/C++/标准库/2021-03-07-20-18-51.png b/C++/标准库/image/2021-03-07-20-18-51.png similarity index 100% rename from C++/标准库/2021-03-07-20-18-51.png rename to C++/标准库/image/2021-03-07-20-18-51.png diff --git a/C++/标准库/2021-03-07-20-20-11.png b/C++/标准库/image/2021-03-07-20-20-11.png similarity index 100% rename from C++/标准库/2021-03-07-20-20-11.png rename to C++/标准库/image/2021-03-07-20-20-11.png diff --git a/C++/标准库/2021-03-07-20-34-45.png b/C++/标准库/image/2021-03-07-20-34-45.png similarity index 100% rename from C++/标准库/2021-03-07-20-34-45.png rename to C++/标准库/image/2021-03-07-20-34-45.png diff --git a/C++/标准库/2021-03-07-20-36-59.png b/C++/标准库/image/2021-03-07-20-36-59.png similarity index 100% rename from C++/标准库/2021-03-07-20-36-59.png rename to C++/标准库/image/2021-03-07-20-36-59.png diff --git a/C++/标准库/2021-03-07-20-52-19.png b/C++/标准库/image/2021-03-07-20-52-19.png similarity index 100% rename from C++/标准库/2021-03-07-20-52-19.png rename to C++/标准库/image/2021-03-07-20-52-19.png diff --git a/C++/标准库/2021-03-07-20-53-15.png b/C++/标准库/image/2021-03-07-20-53-15.png similarity index 100% rename from C++/标准库/2021-03-07-20-53-15.png rename to C++/标准库/image/2021-03-07-20-53-15.png diff --git a/C++/标准库/2021-03-07-21-07-30.png b/C++/标准库/image/2021-03-07-21-07-30.png similarity index 100% rename from C++/标准库/2021-03-07-21-07-30.png rename to C++/标准库/image/2021-03-07-21-07-30.png diff --git a/C++/标准库/2021-03-07-21-10-01.png b/C++/标准库/image/2021-03-07-21-10-01.png similarity index 100% rename from C++/标准库/2021-03-07-21-10-01.png rename to C++/标准库/image/2021-03-07-21-10-01.png diff --git a/C++/标准库/2021-03-07-21-10-05.png b/C++/标准库/image/2021-03-07-21-10-05.png similarity index 100% rename from C++/标准库/2021-03-07-21-10-05.png rename to C++/标准库/image/2021-03-07-21-10-05.png diff --git a/C++/标准库/2021-03-07-21-10-18.png b/C++/标准库/image/2021-03-07-21-10-18.png similarity index 100% rename from C++/标准库/2021-03-07-21-10-18.png rename to C++/标准库/image/2021-03-07-21-10-18.png diff --git a/C++/标准库/2021-03-07-21-14-33.png b/C++/标准库/image/2021-03-07-21-14-33.png similarity index 100% rename from C++/标准库/2021-03-07-21-14-33.png rename to C++/标准库/image/2021-03-07-21-14-33.png diff --git a/C++/标准库/2021-03-07-21-20-51.png b/C++/标准库/image/2021-03-07-21-20-51.png similarity index 100% rename from C++/标准库/2021-03-07-21-20-51.png rename to C++/标准库/image/2021-03-07-21-20-51.png diff --git a/C++/标准库/2021-03-07-21-42-10.png b/C++/标准库/image/2021-03-07-21-42-10.png similarity index 100% rename from C++/标准库/2021-03-07-21-42-10.png rename to C++/标准库/image/2021-03-07-21-42-10.png diff --git a/C++/标准库/2021-03-07-21-42-40.png b/C++/标准库/image/2021-03-07-21-42-40.png similarity index 100% rename from C++/标准库/2021-03-07-21-42-40.png rename to C++/标准库/image/2021-03-07-21-42-40.png diff --git a/C++/标准库/2021-03-07-21-53-28.png b/C++/标准库/image/2021-03-07-21-53-28.png similarity index 100% rename from C++/标准库/2021-03-07-21-53-28.png rename to C++/标准库/image/2021-03-07-21-53-28.png diff --git a/C++/标准库/2021-03-07-22-11-44.png b/C++/标准库/image/2021-03-07-22-11-44.png similarity index 100% rename from C++/标准库/2021-03-07-22-11-44.png rename to C++/标准库/image/2021-03-07-22-11-44.png diff --git a/C++/标准库/2021-03-07-22-12-19.png b/C++/标准库/image/2021-03-07-22-12-19.png similarity index 100% rename from C++/标准库/2021-03-07-22-12-19.png rename to C++/标准库/image/2021-03-07-22-12-19.png diff --git a/C++/标准库/2021-03-07-22-12-27.png b/C++/标准库/image/2021-03-07-22-12-27.png similarity index 100% rename from C++/标准库/2021-03-07-22-12-27.png rename to C++/标准库/image/2021-03-07-22-12-27.png diff --git a/C++/标准库/2021-03-07-22-33-59.png b/C++/标准库/image/2021-03-07-22-33-59.png similarity index 100% rename from C++/标准库/2021-03-07-22-33-59.png rename to C++/标准库/image/2021-03-07-22-33-59.png diff --git a/C++/标准库/2021-03-08-14-03-18.png b/C++/标准库/image/2021-03-08-14-03-18.png similarity index 100% rename from C++/标准库/2021-03-08-14-03-18.png rename to C++/标准库/image/2021-03-08-14-03-18.png diff --git a/C++/标准库/2021-03-08-14-04-34.png b/C++/标准库/image/2021-03-08-14-04-34.png similarity index 100% rename from C++/标准库/2021-03-08-14-04-34.png rename to C++/标准库/image/2021-03-08-14-04-34.png diff --git a/C++/标准库/2021-03-08-14-05-20.png b/C++/标准库/image/2021-03-08-14-05-20.png similarity index 100% rename from C++/标准库/2021-03-08-14-05-20.png rename to C++/标准库/image/2021-03-08-14-05-20.png diff --git a/C++/标准库/2021-03-08-14-06-13.png b/C++/标准库/image/2021-03-08-14-06-13.png similarity index 100% rename from C++/标准库/2021-03-08-14-06-13.png rename to C++/标准库/image/2021-03-08-14-06-13.png diff --git a/C++/标准库/2021-03-08-14-44-22.png b/C++/标准库/image/2021-03-08-14-44-22.png similarity index 100% rename from C++/标准库/2021-03-08-14-44-22.png rename to C++/标准库/image/2021-03-08-14-44-22.png diff --git a/C++/标准库/2021-03-08-14-44-45.png b/C++/标准库/image/2021-03-08-14-44-45.png similarity index 100% rename from C++/标准库/2021-03-08-14-44-45.png rename to C++/标准库/image/2021-03-08-14-44-45.png diff --git a/C++/标准库/2021-03-08-14-45-15.png b/C++/标准库/image/2021-03-08-14-45-15.png similarity index 100% rename from C++/标准库/2021-03-08-14-45-15.png rename to C++/标准库/image/2021-03-08-14-45-15.png diff --git a/C++/标准库/2021-03-08-14-45-22.png b/C++/标准库/image/2021-03-08-14-45-22.png similarity index 100% rename from C++/标准库/2021-03-08-14-45-22.png rename to C++/标准库/image/2021-03-08-14-45-22.png diff --git a/C++/标准库/2021-03-08-14-46-04.png b/C++/标准库/image/2021-03-08-14-46-04.png similarity index 100% rename from C++/标准库/2021-03-08-14-46-04.png rename to C++/标准库/image/2021-03-08-14-46-04.png diff --git a/C++/标准库/2021-03-08-14-47-09.png b/C++/标准库/image/2021-03-08-14-47-09.png similarity index 100% rename from C++/标准库/2021-03-08-14-47-09.png rename to C++/标准库/image/2021-03-08-14-47-09.png diff --git a/C++/标准库/2021-03-08-18-31-27.png b/C++/标准库/image/2021-03-08-18-31-27.png similarity index 100% rename from C++/标准库/2021-03-08-18-31-27.png rename to C++/标准库/image/2021-03-08-18-31-27.png diff --git a/C++/标准库/2021-03-08-19-36-00.png b/C++/标准库/image/2021-03-08-19-36-00.png similarity index 100% rename from C++/标准库/2021-03-08-19-36-00.png rename to C++/标准库/image/2021-03-08-19-36-00.png diff --git a/C++/类设计者的工具/2 操作重载与类型转换.md b/C++/类设计者的工具/2 操作重载与类型转换.md index 299bf431..698304f2 100644 --- a/C++/类设计者的工具/2 操作重载与类型转换.md +++ b/C++/类设计者的工具/2 操作重载与类型转换.md @@ -8,7 +8,7 @@ * 可以被重载的运算符 -![](2021-03-06-23-22-55.png) +![](image/2021-03-06-23-22-55.png) ## 2 输入输出运算符 diff --git a/C++/类设计者的工具/3 面向对象程序设计.md b/C++/类设计者的工具/3 面向对象程序设计.md index db71b0a3..405e579d 100644 --- a/C++/类设计者的工具/3 面向对象程序设计.md +++ b/C++/类设计者的工具/3 面向对象程序设计.md @@ -94,7 +94,7 @@ Bulk_quote::Bulk_quote(string book,double p,int qty,double disc):Quote(book,p),m ### 继承权限 * 继承权限:继承方式规定了如何访问继承的基类的成员。继承方式指定了派生类成员以及类外对象对于从基类继承来的成员的访问权限 -![](2021-03-07-14-26-29.png) +![](image/2021-03-07-14-26-29.png) ### 注意事项 @@ -366,7 +366,7 @@ protected: ### 菱形继承 -![](2021-03-07-15-55-33.png) +![](image/2021-03-07-15-55-33.png) * 类 A 派生出类 B 和类 C,类 D 继承自类 B 和类 C,这个时候类 A 中的成员变量和成员函数继承到类 D 中变成了两份,一份来自 A-->B-->D 这条路径,另一份来自 A-->C-->D 这条路径。 @@ -457,7 +457,7 @@ int main(){ * 现在让我们重新梳理一下本例的继承关系,如下图所示: -![](2021-03-07-15-58-59.png) +![](image/2021-03-07-15-58-59.png) * 观察这个新的继承体系,我们会发现虚继承的一个不太直观的特征:必须在虚派生的真实需求出现前就已经完成虚派生的操作。在上图中,当定义 D 类时才出现了对虚派生的需求,但是如果 B 类和 C 类不是从 A 类虚派生得到的,那么 D 类还是会保留 A 类的两份成员。 @@ -469,7 +469,7 @@ int main(){ * C++标准库中的 iostream 类就是一个虚继承的实际应用案例。iostream 从 istream 和 ostream 直接继承而来,而 istream 和 ostream 又都继承自一个共同的名为 base_ios 的类,是典型的菱形继承。此时 istream 和 ostream 必须采用虚继承,否则将导致 iostream 类中保留两份 base_ios 类的成员。 -![](2021-03-07-16-00-43.png) +![](image/2021-03-07-16-00-43.png) ### 虚基类成员的可见性 diff --git a/C++/类设计者的工具/2021-03-06-23-22-55.png b/C++/类设计者的工具/image/2021-03-06-23-22-55.png similarity index 100% rename from C++/类设计者的工具/2021-03-06-23-22-55.png rename to C++/类设计者的工具/image/2021-03-06-23-22-55.png diff --git a/C++/类设计者的工具/2021-03-07-14-26-29.png b/C++/类设计者的工具/image/2021-03-07-14-26-29.png similarity index 100% rename from C++/类设计者的工具/2021-03-07-14-26-29.png rename to C++/类设计者的工具/image/2021-03-07-14-26-29.png diff --git a/C++/类设计者的工具/2021-03-07-15-55-33.png b/C++/类设计者的工具/image/2021-03-07-15-55-33.png similarity index 100% rename from C++/类设计者的工具/2021-03-07-15-55-33.png rename to C++/类设计者的工具/image/2021-03-07-15-55-33.png diff --git a/C++/类设计者的工具/2021-03-07-15-58-59.png b/C++/类设计者的工具/image/2021-03-07-15-58-59.png similarity index 100% rename from C++/类设计者的工具/2021-03-07-15-58-59.png rename to C++/类设计者的工具/image/2021-03-07-15-58-59.png diff --git a/C++/类设计者的工具/2021-03-07-16-00-43.png b/C++/类设计者的工具/image/2021-03-07-16-00-43.png similarity index 100% rename from C++/类设计者的工具/2021-03-07-16-00-43.png rename to C++/类设计者的工具/image/2021-03-07-16-00-43.png diff --git a/C++/面试/1.C++编译过程详解.md b/C++/面试/1.C++编译过程详解.md index 8eabfb05..e79e7e9d 100644 --- a/C++/面试/1.C++编译过程详解.md +++ b/C++/面试/1.C++编译过程详解.md @@ -5,7 +5,7 @@ 程序要运行起来,必须要经过四个步骤:预处理、编译、汇编和链接。接下来通过几个简单的例子来详细讲解一下这些过程。 -![](2021-03-03-19-44-57.png) +![](image/2021-03-03-19-44-57.png) 对于上边用到的几个选项需要说明一下。 @@ -37,7 +37,7 @@ 编写一个简单的程序,然后使用-E选项执行预处理过程,打开生成的 .i 文件与源文件进行比对,结果一目了然 -![](2021-03-03-19-49-02.png) +![](image/2021-03-03-19-49-02.png) 对于给代码加上行号这个就不在这里演示了,我们在写代码的时候是不会手动添加行号的,我们看到的行号都是自己使用的编辑工具自动加上的,而这些行号编译系统是看不到的,但是呢,我们发现如果我们哪一行的代码出现了问题,编译的时候就会给出提示说哪行的代码有什么问题,这就已经证明,编译器是会自动添加行号的。 diff --git a/C++/面试/12.nullptr、NULL、0.md b/C++/面试/12.nullptr、NULL、0.md index a7b144df..01f9c6af 100644 --- a/C++/面试/12.nullptr、NULL、0.md +++ b/C++/面试/12.nullptr、NULL、0.md @@ -34,7 +34,7 @@ foo_t *f = NULL; * 重载过程中会出现问题,因为空指针会被识别为整形的0,从而导致重载出现错误。 * 0指针的二义性。 -![](2021-03-05-17-00-11.png) +![](image/2021-03-05-17-00-11.png) ### C++中的nullptr * nullptr 关键字,被自动转换为各种pointer类型。但他不会不转换为任何整型类型。防止null作为参数的时候出现函数重载的错误。 diff --git a/C++/面试/5.C++内存分配.md b/C++/面试/5.C++内存分配.md index a8e5c498..83899801 100644 --- a/C++/面试/5.C++内存分配.md +++ b/C++/面试/5.C++内存分配.md @@ -2,7 +2,7 @@ ### 内存分配示意图 -![](2021-03-04-10-30-35.png) +![](image/2021-03-04-10-30-35.png) * Unused Memory:用于程序代码块对齐 Read-only code segment:只读,存代码和一些其他的东西 diff --git a/C++/面试/2021-03-03-19-44-57.png b/C++/面试/image/2021-03-03-19-44-57.png similarity index 100% rename from C++/面试/2021-03-03-19-44-57.png rename to C++/面试/image/2021-03-03-19-44-57.png diff --git a/C++/面试/2021-03-03-19-49-02.png b/C++/面试/image/2021-03-03-19-49-02.png similarity index 100% rename from C++/面试/2021-03-03-19-49-02.png rename to C++/面试/image/2021-03-03-19-49-02.png diff --git a/C++/面试/2021-03-04-10-30-35.png b/C++/面试/image/2021-03-04-10-30-35.png similarity index 100% rename from C++/面试/2021-03-04-10-30-35.png rename to C++/面试/image/2021-03-04-10-30-35.png diff --git a/C++/面试/2021-03-05-17-00-11.png b/C++/面试/image/2021-03-05-17-00-11.png similarity index 100% rename from C++/面试/2021-03-05-17-00-11.png rename to C++/面试/image/2021-03-05-17-00-11.png diff --git a/数据结构/0 数据结构基础.md b/数据结构/0 数据结构基础.md index 63d346c9..9dabbc55 100644 --- a/数据结构/0 数据结构基础.md +++ b/数据结构/0 数据结构基础.md @@ -6,7 +6,7 @@ ## 1 简介 ### 数据结构预算法 -![](数据结构与算法.jpeg) +![](image/数据结构与算法.jpeg) ### 基本术语 @@ -36,7 +36,7 @@ ## 2 数据结构分类 -![](2021-03-12-17-07-01.png) +![](image/2021-03-12-17-07-01.png) ### 线性数据结构 diff --git a/数据结构/1 数组.md b/数据结构/1 数组.md index ed73e66b..7012b81c 100644 --- a/数据结构/1 数组.md +++ b/数据结构/1 数组.md @@ -59,7 +59,7 @@ float arr[5]; * 1(基于一个索引):数组的第一个元素是arr [1]。 * n(基于n的索引):基于数组的第一个元素,可以定位任何随机索引值。 -![](2021-03-12-20-47-17.png) +![](image/2021-03-12-20-47-17.png) ### 数组实现 * C++内置数组数据类型。 @@ -140,21 +140,21 @@ else{ * 一般将二维数组映射到一维数组,存储在内存中。 * 一个3 X 3的二维数组如下图所示。需要将此数组映射到一维数组,存储到内存中。 -![](2021-03-12-20-55-32.png) +![](image/2021-03-12-20-55-32.png) ### 二维数组的存储——行主顺序 * 在行主排序中,二维数组的所有行连续地存储在存储器中。上图中所示数组,它按行主顺序的存储器分配如下所示 -![](2021-03-12-20-57-19.png) -![](2021-03-12-20-58-14.png) +![](image/2021-03-12-20-57-19.png) +![](image/2021-03-12-20-58-14.png) ### 二维数组的存储——列主顺序 * 根据列主排序,二维数组的所有列都连续地存储在存储器中。 上面图像中所示数组的存储器分配给出如下 -![](2021-03-12-20-57-51.png) -![](2021-03-12-20-58-23.png) +![](image/2021-03-12-20-57-51.png) +![](image/2021-03-12-20-58-23.png) ### 计算二维数组随机元素的地址 diff --git a/数据结构/trie.md b/数据结构/10 字典树.md similarity index 100% rename from 数据结构/trie.md rename to 数据结构/10 字典树.md diff --git a/数据结构/2 链表.md b/数据结构/2 链表.md index 2eb6e01b..24a1acba 100644 --- a/数据结构/2 链表.md +++ b/数据结构/2 链表.md @@ -8,9 +8,9 @@ * 节点包含两个字段,即存储在该地址的数据和包含下一个节点地址的指针。 * 链表的最后一个节点包含指向null的指针。 -![](2021-03-12-21-00-33.png) +![](image/2021-03-12-21-00-33.png) -![](2021-03-12-21-01-53.png) +![](image/2021-03-12-21-01-53.png) ### 链表特点 diff --git a/数据结构/2.1 单链表.md b/数据结构/2.1 单链表.md index fd00e725..a1256917 100644 --- a/数据结构/2.1 单链表.md +++ b/数据结构/2.1 单链表.md @@ -6,9 +6,9 @@ * 节点的数据部分存储将由节点表示的实际信息,而节点的链接部分存储其直接后继的地址。 * 单向链或单链表可以仅在一个方向上遍历。也就是说每个节点只包含下一个节点的指针,因此不能反向遍历链表。 -![](2021-03-12-21-00-33.png) +![](image/2021-03-12-21-00-33.png) -![](2021-03-12-21-08-07.png) +![](image/2021-03-12-21-08-07.png) ### 链表复杂度 diff --git a/数据结构/2.2 双链表.md b/数据结构/2.2 双链表.md index e9766ef7..5557bd12 100644 --- a/数据结构/2.2 双链表.md +++ b/数据结构/2.2 双链表.md @@ -6,8 +6,8 @@ * 双向链表是一种复杂类型的链表,它的节点包含指向序列中前一个节点和下一个节点的指针。 * 在双向链表中,节点由三部分组成:节点数据,指向下一个节点的指针(next指针),指向前一个节点的指针(prev指针)。 -![](2021-03-12-21-14-57.png) -![](2021-03-12-21-14-50.png) +![](image/2021-03-12-21-14-57.png) +![](image/2021-03-12-21-14-50.png) ## 2 双链表的存储和实现 @@ -15,7 +15,7 @@ * 双向链表为每个节点消耗更多空间 * 可以更灵活地操作链表中的元素。 -![](双链表的数据存储.png) +![](image/双链表的数据存储.png) ### 数据实现 * 使用结构体和指针实现。 diff --git a/数据结构/2.3 循环单链表.md b/数据结构/2.3 循环单链表.md index e9fd6ab7..8c59ad50 100644 --- a/数据结构/2.3 循环单链表.md +++ b/数据结构/2.3 循环单链表.md @@ -5,7 +5,7 @@ * 在循环单链表中,链表的最后一个节点包含指向链表的第一个节点的指针。可以有循环单向链表以及循环双链表。 * 遍历一个循环单链表,直到到达开始的同一个节点。循环单链表类似于链表,但它没有开始也没有结束。任何节点的下一部分都不存在NULL值。 -![](循环单向链表.png) +![](image/循环单向链表.png) ## 2 数据存储和实现 @@ -13,7 +13,7 @@ 链表的最后一个节点包含链表的第一个节点的地址。 -![](2021-03-12-21-21-07.png) +![](image/2021-03-12-21-21-07.png) ### 数据实现 diff --git a/数据结构/2.4 循环双链表.md b/数据结构/2.4 循环双链表.md index a1d7938f..3ca517db 100644 --- a/数据结构/2.4 循环双链表.md +++ b/数据结构/2.4 循环双链表.md @@ -9,7 +9,7 @@ * 链表的最后一个节点包含列表的第一个节点的地址。 * 链表的第一个节点还包含的前一个指针是指向最后一个节点的地址。 -![](2021-03-12-21-22-43.png) +![](image/2021-03-12-21-22-43.png) ## 2 数据存储和实现 @@ -17,7 +17,7 @@ * 起始节点包含最后一个(也是前一个)节点的地址,即8和下一个节点,即4。链表的最后一个节点,存储在地址8并包含数据6,包含链表的第一个节点的地址 -![](循环双向链表内存.png) +![](image/循环双向链表内存.png) ### 数据实现 diff --git a/数据结构/3 栈.md b/数据结构/3 栈.md index f2373c18..ada09ca7 100644 --- a/数据结构/3 栈.md +++ b/数据结构/3 栈.md @@ -8,7 +8,7 @@ * 堆栈(Stack)是一个递归数据结构,具有指向其顶部元素的指针。 * 堆栈为后进先出(LIFO)列表,即首先插入堆栈的元素将最后从堆栈中删除. -![](堆栈.png) +![](image/堆栈.png) ### 应用 @@ -33,10 +33,10 @@ - 推入 push - 将数据放入堆栈的顶端(数组形式或串列形式),堆栈顶端 top 指针加一。 -![](2021-03-12-21-29-39.png) +![](image/2021-03-12-21-29-39.png) - 弹出 pop - 将顶端数据数据输出(回传),堆栈顶端数据减一。 -![](2021-03-12-21-29-49.png) +![](image/2021-03-12-21-29-49.png) - 查看 top - 查看栈顶的元素而不删除它们。 diff --git a/数据结构/4 队列.md b/数据结构/4 队列.md index d4a38060..135def2c 100644 --- a/数据结构/4 队列.md +++ b/数据结构/4 队列.md @@ -6,7 +6,7 @@ * 队列可以定义为有序列表。在一端执行插入操作rear,删除操作在另一端执行,称为front。 * 队列被称为先进先出列表。 -![](2021-03-12-21-36-39.png) +![](image/2021-03-12-21-36-39.png) ### 应用 diff --git a/数据结构/4.1 循环队列.md b/数据结构/4.1 循环队列.md index a758dd62..37e8c81b 100644 --- a/数据结构/4.1 循环队列.md +++ b/数据结构/4.1 循环队列.md @@ -6,7 +6,7 @@ * 在循环队列中,最后一个索引紧跟在第一个索引之后。 * 当front = -1和rear = max-1时,循环队列将满。循环队列的实现类似于线性队列的实现。只有在插入和删除的情况下实现的逻辑部分与线性队列中的逻辑部分不同。 -![](循环队列.png) +![](image/循环队列.png) ### 时间复杂度 diff --git a/数据结构/5 散列表.md b/数据结构/5 散列表.md index 5ab18c01..087d2f2f 100644 --- a/数据结构/5 散列表.md +++ b/数据结构/5 散列表.md @@ -23,7 +23,7 @@ ### 哈希函数示例 -![](2021-03-13-12-51-08.png) +![](image/2021-03-13-12-51-08.png) * 在示例中,我们使用 y = x % 5 作为哈希函数。让我们使用这个例子来完成插入和搜索策略: 1. 插入:我们通过哈希函数解析键,将它们映射到相应的桶中。 @@ -39,7 +39,7 @@ * 哈希函数将取决于`键值的范围`和`桶的数量。` * 哈希函数的示例: -![](2021-03-13-12-53-35.png) +![](image/2021-03-13-12-53-35.png) * 哈希函数的设计是一个开放的问题。其思想是尽可能将键分配到桶中,理想情况下,完美的哈希函数将是键和桶之间的一对一映射。然而,在大多数情况下,哈希函数并不完美,它需要在桶的数量和桶的容量之间进行权衡。 diff --git a/数据结构/hash-search.md b/数据结构/5.1 散列表查找.md similarity index 100% rename from 数据结构/hash-search.md rename to 数据结构/5.1 散列表查找.md diff --git a/数据结构/6 树.md b/数据结构/6 树.md index 8f5de4e9..852b3045 100644 --- a/数据结构/6 树.md +++ b/数据结构/6 树.md @@ -12,7 +12,7 @@ * 树的节点要么保持它们之间的父子关系,要么它们是姐妹节点。 * 在通用树中,一个节点可以具有任意数量的子节点,但它只能有一个父节点。 -![](树.png) +![](image/树.png) ### 特点 - 每个节点都只有有限个子节点或无子节点。 @@ -75,9 +75,9 @@ 按应用场景划分 * 霍夫曼树:最短的二叉树称为哈夫曼树或最优二叉树; * 表达式树:用于评估简单的算术表达式。表达式树基本上是二叉树,其中内部节点由运算符表示,而叶节点由操作数表示。表达式树被广泛用于解决代数表达式,如(a + b)*(a-b) -![](2021-03-12-22-05-59.png) +![](image/2021-03-12-22-05-59.png) * 竞赛树:用于记录两名比赛者之间每轮比赛的胜者。 比赛树也可以称为选择树或获胜者树。 外部节点表示正在播放匹配的比赛者,而内部节点表示所播放的匹配的胜者。 在最顶层,比赛的获胜者作为树的根节点出现。 -![](2021-03-12-22-07-20.png) +![](image/2021-03-12-22-07-20.png) ## 3 树的实现 ### 数据实现 diff --git a/数据结构/6.1 二叉树.md b/数据结构/6.1 二叉树.md index 957a2ede..4352e34a 100644 --- a/数据结构/6.1 二叉树.md +++ b/数据结构/6.1 二叉树.md @@ -9,7 +9,7 @@ * 左二叉树 * 右二叉树 -![](2021-03-12-22-10-38.png) +![](image/2021-03-12-22-10-38.png) ### 性质 @@ -24,13 +24,13 @@ * 在严格二叉树中,每个非叶节点包含非空的左和右子树。 换句话说,每个非叶节点的等级将始终为2。具有n个叶子的严格二叉树将具有(2n-1)个节点。 -![](2021-03-12-22-12-08.png) +![](image/2021-03-12-22-12-08.png) ### 完全二叉树 * 如果所有叶子都位于相同的水平d,则称二元树是完全二叉树。完全二叉树是二叉树,在0级和d级之间的每个级别包含正好$2 ^d$个节点。 具有深度d的完全二叉树中的节点总数是$2^{(d+1)}-1$,其中叶节点是$2^d&,非叶节点是$2^d-1$。 -![](2021-03-12-22-12-52.png) +![](image/2021-03-12-22-12-52.png) ## 3 二叉树的操作——遍历搜索 @@ -72,14 +72,14 @@ ### 链表实现 * 二叉树以链表的形式存储在存储器中,其节点的数量存储在非连续的存储器位置并通过像树一样继承父子关系而链接在一起。 每个节点包含三个部分:指向左节点的指针,数据元素和指向右节点的指针。 每个二叉树都有一个根指针,指向二叉树的根节点。 在空二进制树中,根指针将指向null。 -![](2021-03-12-22-16-50.png) +![](image/2021-03-12-22-16-50.png) ``` ``` ### 数组实现 * 这是存储树元素的最简单的内存分配技术,但它是一种效率低下的技术,因为它需要大量空间来存储树元素。 下图显示了二叉树及其内存分配。 -![](2021-03-12-22-17-33.png) +![](image/2021-03-12-22-17-33.png) * 在这种表示方式中,数组用于存储树元素。 数组的大小将等于树中存在的节点数。 树的根节点将出现在数组的第一个索引处。 如果节点存储在第i个索引处,则其左右子节点将存储在2i和2i + 1位置。 如果数组的第一个索引,即tree[1]为0,则表示树为空。 ``` diff --git a/数据结构/6.2 二叉搜索树.md b/数据结构/6.2 二叉搜索树.md index f6e632cc..98f51975 100644 --- a/数据结构/6.2 二叉搜索树.md +++ b/数据结构/6.2 二叉搜索树.md @@ -9,7 +9,7 @@ * 右子树中所有节点的值大于或等于根的值。 * 此规则将递归地应用于根的所有左子树和右子树 -![](2021-03-12-22-46-59.png) +![](image/2021-03-12-22-46-59.png) ### 优点 @@ -33,7 +33,7 @@ 43, 10, 79, 90, 12, 54, 11, 9, 50 ``` -![](2021-03-12-22-48-28.png) +![](image/2021-03-12-22-48-28.png) ### 删除 diff --git a/数据结构/6.3 平衡二叉树.md b/数据结构/6.3 平衡二叉树.md index 8afd25c4..13a18560 100644 --- a/数据结构/6.3 平衡二叉树.md +++ b/数据结构/6.3 平衡二叉树.md @@ -16,7 +16,7 @@ * 如果任何节点的平衡因子为0,则意味着左子树和右子树包含相等的高度。 * 如果任何节点的平衡因子是-1,则意味着左子树比右子树低一级。 -![](2021-03-12-22-53-43.png) +![](image/2021-03-12-22-53-43.png) ### 复杂性 @@ -65,8 +65,8 @@ 2. 右孩子的左子树变为该节点的右子树 3. 节点本身变为右孩子的左子树 -![](2021-03-13-14-06-44.png) -![](2021-03-13-14-09-24.png) +![](image/2021-03-13-14-06-44.png) +![](image/2021-03-13-14-09-24.png) ### 右旋 @@ -74,8 +74,8 @@ 1. 节点的左孩子代表此节点 2. 节点的左孩子的右子树变为节点的左子树 3. 将此节点作为左孩子节点的右子树。 -![](2021-03-13-14-10-25.png) -![](2021-03-13-14-10-40.png) +![](image/2021-03-13-14-10-25.png) +![](image/2021-03-13-14-10-40.png) ### 插入过程的四种旋转 @@ -91,7 +91,7 @@ ### LL单次右旋 * 由于在**A的左子树的根结点的左子树**上插入结点F(LL),需进行一次的向右的顺时针旋转操作 -![](2021-03-13-14-25-55.png) +![](image/2021-03-13-14-25-55.png) ```C++ //LL型调整函数 //返回:新父节点 @@ -131,7 +131,7 @@ Tree LL_rotate(Tree node){ ``` ### RR单次左旋 * 在 A 的右子树的根节点的右子树上插入节点而破坏平衡。需要进行一次左旋操作。 -![](2021-03-13-14-28-34.png) +![](image/2021-03-13-14-28-34.png) ```C++ //RR型调整函数 @@ -174,7 +174,7 @@ Tree RR_rotate(Tree node){ ``` ### LR先左旋后右旋 * 在A的左子树的根节点的右子树上插入节点F而破坏平衡。需要先进行子树的左旋再进行A节点的右旋。 -![](2021-03-13-14-29-50.png) +![](image/2021-03-13-14-29-50.png) ```C++ //LR型,先左旋转,再右旋转 //返回:新父节点 @@ -185,7 +185,7 @@ Tree LR_rotate(Tree node){ ``` ### RL先右旋后左旋 * 在 A 的右子树的根节点的左子树上插入节点F而破坏平衡。需要先进行子树右旋,然后进行A节点的左旋。 -![](2021-03-13-14-30-35.png) +![](image/2021-03-13-14-30-35.png) ```C++ //RL型,先右旋转,再左旋转 //返回:新父节点 diff --git a/数据结构/6.4 红黑树.md b/数据结构/6.4 红黑树.md index d3c9ddfb..280459d8 100644 --- a/数据结构/6.4 红黑树.md +++ b/数据结构/6.4 红黑树.md @@ -97,7 +97,7 @@ RB-INSERT-FIXUP(T, z) ### 左旋 * 失去平衡,逆时针旋转 -![](2021-03-13-14-43-51.png) +![](image/2021-03-13-14-43-51.png) ``` LEFT-ROTATE(T, x) y ← right[x] // 前提:这里假设x的右孩子为y。下面开始正式操作 @@ -116,7 +116,7 @@ LEFT-ROTATE(T, x) ### 右旋 * 失去平衡,向右旋转 -![](2021-03-13-14-44-34.png) +![](image/2021-03-13-14-44-34.png) ``` RIGHT-ROTATE(T, y) diff --git a/数据结构/6.5 B树.md b/数据结构/6.5 B树.md index 9e669490..d3cd1168 100644 --- a/数据结构/6.5 B树.md +++ b/数据结构/6.5 B树.md @@ -14,7 +14,7 @@ * 4阶B树如下 -![](2021-03-12-23-35-36.png) +![](image/2021-03-12-23-35-36.png) ### 应用 @@ -50,7 +50,7 @@ > 在B树中搜索取决于树的高度。 搜索算法需要O(log n)时间来搜索B树中的任何元素。 -![](2021-03-12-23-39-19.png) +![](image/2021-03-12-23-39-19.png) ### 插入 @@ -65,11 +65,11 @@ > 实例 * 将节点8插入到下图所示的5阶B树中。 -![](2021-03-12-23-47-41.png) +![](image/2021-03-12-23-47-41.png) * 8将插入5的右侧,因此插入8。 -![](2021-03-12-23-47-46.png) +![](image/2021-03-12-23-47-46.png) * 该节点现在包含5个键,大于(5 -1 = 4)个键。 因此,将节点从中间分开,即8,并将其推到其父节点,如下所示。(图有问题) -![](2021-03-12-23-47-52.png) +![](image/2021-03-12-23-47-52.png) ### 删除 @@ -85,11 +85,11 @@ > 实例 * 从下图所示的5阶B树中删除节点:53。 -![](2021-03-12-23-51-37.png) +![](image/2021-03-12-23-51-37.png) * 元素49的右子节点中存在53,则删除它。 -![](2021-03-12-23-51-43.png) +![](image/2021-03-12-23-51-43.png) * 现在,57是唯一留在节点中的元素,在5阶B树中必须存在的最小元素数是2。它小于左边和右边子树中的元素 因此,也不足以将其与父母的左兄弟和干预元素合并,即49。最终的B树如下所示。 -![](2021-03-12-23-51-51.png) +![](image/2021-03-12-23-51-51.png) ### 实现 ``` diff --git a/数据结构/6.6 B+树.md b/数据结构/6.6 B+树.md index 9d96b116..e926e48e 100644 --- a/数据结构/6.6 B+树.md +++ b/数据结构/6.6 B+树.md @@ -32,13 +32,13 @@ > 实例 * 将值195插入到下图所示的5阶B+树中。 -![](2021-03-12-23-58-07.png) +![](image/2021-03-12-23-58-07.png) * 在190之后,将在右子树120中插入195。将其插入所需位置。 -![](2021-03-12-23-58-14.png) +![](image/2021-03-12-23-58-14.png) * 该节点包含大于最大的元素数量,即4,因此将其拆分并将中间节点放置到父节点。 -![](2021-03-12-23-58-20.png) +![](image/2021-03-12-23-58-20.png) * 现在,索引节点包含6个子节点和5个键,违反B+树属性,因此需要将其拆分,如下所示。将108提为根节点。60,78左子节点,120,190右子节点。 -![](2021-03-12-23-58-29.png) +![](image/2021-03-12-23-58-29.png) ### 删除 @@ -48,10 +48,10 @@ > 示例 * 从下图所示的B+树中删除键为200。 -![](2021-03-13-00-03-01.png) +![](image/2021-03-13-00-03-01.png) * 在195之后的190的右子树中存在200,删除它。 -![](2021-03-13-00-03-07.png) +![](image/2021-03-13-00-03-07.png) * 使用195,190,154和129合并两个节点。 -![](2021-03-13-00-03-13.png) +![](image/2021-03-13-00-03-13.png) * 现在,元素120是节点中存在的违反B+树属性的单个元素。 因此,需要使用60,78,108和120来合并它。现在,B+树的高度将减1。 -![](2021-03-13-00-03-30.png) +![](image/2021-03-13-00-03-30.png) diff --git a/数据结构/6.8 堆树.md b/数据结构/6.8 堆树.md index 1bf7323f..9f31743c 100644 --- a/数据结构/6.8 堆树.md +++ b/数据结构/6.8 堆树.md @@ -12,17 +12,17 @@ 2. 堆中的某个结点的值总是大于等于(最大堆)或小于等于(最小堆)其孩子结点的值。 3. 堆中每个结点的子树都是堆树 -![](2021-03-13-15-23-14.png) +![](image/2021-03-13-15-23-14.png) -![](2021-03-13-15-23-24.png) +![](image/2021-03-13-15-23-24.png) * 使用数组表示的堆树 -![](2021-03-13-15-31-06.png) +![](image/2021-03-13-15-31-06.png) ### 应用 * 堆结构的一个常见应用是建立优先队列(Priority Queue)。 -![](2021-03-13-15-25-15.png) +![](image/2021-03-13-15-25-15.png) * 普通树占用的内存空间比它们存储的数据要多。你必须为节点对象以及左/右子节点指针分配内存。堆仅仅使用一个数据来存储数组,且不使用指针。 @@ -61,11 +61,11 @@ * 向下调整(小堆)示例: -![](2021-03-13-15-43-40.png) +![](image/2021-03-13-15-43-40.png) * 向下调整(大堆)示例: -![](2021-03-13-15-43-53.png) +![](image/2021-03-13-15-43-53.png) * **下沉不能保证路径上最坏的值下放到叶节点。** @@ -82,14 +82,14 @@ * 将数据插入到数组最后,再进行向上调整。 -![](2021-03-13-16-12-10.png) +![](image/2021-03-13-16-12-10.png) ### 删除(堆顶的数据) * 删除堆是删除堆顶的数据。将堆顶的数据和最后一个数据交换,然后删除数组最后一个数据,再进行向下调整算法 -![](2021-03-13-17-02-40.png) +![](image/2021-03-13-17-02-40.png) ### 堆排序 * 堆排序 diff --git a/数据结构/7 图.md b/数据结构/7 图.md index 8b47c1d9..49c0dd0e 100644 --- a/数据结构/7 图.md +++ b/数据结构/7 图.md @@ -8,7 +8,7 @@ * 图G 可以定义为有序集G(V,E),其中V(G)表示顶点集,E(G)表示用于连接这些顶点的边集。 * 图G(V,E)有5个顶点(A,B,C,D,E)和6个边((A,B),(B,C),(C,E),(E,D), (D,B),(D,A))如下图所示。 -![](2021-03-13-00-07-04.png) +![](image/2021-03-13-00-07-04.png) ### 术语 @@ -41,21 +41,21 @@ * 如果在Vi和Vj之间存在边缘,则无向图G的邻接矩阵表示中的项目Mij将为1。 * 无向图及其邻接矩阵表示如下图所示。 -![](2021-03-13-00-15-09.png) +![](image/2021-03-13-00-15-09.png) * 有向图及其邻接矩阵表示如下图所示。 -![](2021-03-13-00-15-45.png) +![](image/2021-03-13-00-15-45.png) * 权重有向图以及邻接矩阵表示如下图所示。 -![](2021-03-13-00-16-39.png) +![](image/2021-03-13-00-16-39.png) ### 邻接链表 * 邻接列表用于将图存储到计算机的内存中。考虑下图中显示的无向图并检查邻接列表表示。要为图中存在的每个节点维护邻接列表,邻接列表将节点值和指向下一个相邻节点的指针存储到相应节点。 如果遍历所有相邻节点,则将NULL存储在列表的最后一个节点的指针字段中。 邻接列表的长度之和等于无向图中存在的边数的两倍。 -![](2021-03-13-00-18-58.png) +![](image/2021-03-13-00-18-58.png) * 有向图,并查看图的邻接列表表示。在有向图中,所有邻接列表的长度之和等于图中存在的边的数量。 -![](2021-03-13-00-23-57.png) +![](image/2021-03-13-00-23-57.png) * 加权有向图,每个节点包含一个额外的字段,称为节点的权重。 有向图的邻接列表表示如下图所示。 -![](2021-03-13-00-25-14.png) +![](image/2021-03-13-00-25-14.png) ## 3 基本操作 @@ -103,7 +103,7 @@ > 实例 考虑下图中显示的图G,计算从节点A到节点E的最小路径p。给定每条边的长度为1。最小路径P可以通过应用广度优先搜索算法找到,该算法将从节点A开始并将以E结束。算法使用两个队列,即QUEUE1和QUEUE2。 QUEUE1保存要处理的所有节点,而QUEUE2保存从QUEUE1处理和删除的所有节点。 -![](2021-03-13-00-29-43.png) +![](image/2021-03-13-00-29-43.png) ``` ``` @@ -130,7 +130,7 @@ 考虑图G及其邻接列表,如下图所示。 通过使用深度优先搜索(DFS)算法计算从节点H开始打印图的所有节点的顺序。 -![](2021-03-13-00-30-58.png) +![](image/2021-03-13-00-30-58.png) ``` ``` diff --git a/数据结构/skiplist.md b/数据结构/8 线性表查找.md similarity index 100% rename from 数据结构/skiplist.md rename to 数据结构/8 线性表查找.md diff --git a/数据结构/linear-list-search.md b/数据结构/9 跳表查找.md similarity index 100% rename from 数据结构/linear-list-search.md rename to 数据结构/9 跳表查找.md diff --git a/数据结构/2021-03-12-17-07-01.png b/数据结构/image/2021-03-12-17-07-01.png similarity index 100% rename from 数据结构/2021-03-12-17-07-01.png rename to 数据结构/image/2021-03-12-17-07-01.png diff --git a/数据结构/2021-03-12-20-47-17.png b/数据结构/image/2021-03-12-20-47-17.png similarity index 100% rename from 数据结构/2021-03-12-20-47-17.png rename to 数据结构/image/2021-03-12-20-47-17.png diff --git a/数据结构/2021-03-12-20-55-32.png b/数据结构/image/2021-03-12-20-55-32.png similarity index 100% rename from 数据结构/2021-03-12-20-55-32.png rename to 数据结构/image/2021-03-12-20-55-32.png diff --git a/数据结构/2021-03-12-20-57-19.png b/数据结构/image/2021-03-12-20-57-19.png similarity index 100% rename from 数据结构/2021-03-12-20-57-19.png rename to 数据结构/image/2021-03-12-20-57-19.png diff --git a/数据结构/2021-03-12-20-57-51.png b/数据结构/image/2021-03-12-20-57-51.png similarity index 100% rename from 数据结构/2021-03-12-20-57-51.png rename to 数据结构/image/2021-03-12-20-57-51.png diff --git a/数据结构/2021-03-12-20-58-14.png b/数据结构/image/2021-03-12-20-58-14.png similarity index 100% rename from 数据结构/2021-03-12-20-58-14.png rename to 数据结构/image/2021-03-12-20-58-14.png diff --git a/数据结构/2021-03-12-20-58-23.png b/数据结构/image/2021-03-12-20-58-23.png similarity index 100% rename from 数据结构/2021-03-12-20-58-23.png rename to 数据结构/image/2021-03-12-20-58-23.png diff --git a/数据结构/2021-03-12-21-00-33.png b/数据结构/image/2021-03-12-21-00-33.png similarity index 100% rename from 数据结构/2021-03-12-21-00-33.png rename to 数据结构/image/2021-03-12-21-00-33.png diff --git a/数据结构/2021-03-12-21-01-53.png b/数据结构/image/2021-03-12-21-01-53.png similarity index 100% rename from 数据结构/2021-03-12-21-01-53.png rename to 数据结构/image/2021-03-12-21-01-53.png diff --git a/数据结构/2021-03-12-21-08-07.png b/数据结构/image/2021-03-12-21-08-07.png similarity index 100% rename from 数据结构/2021-03-12-21-08-07.png rename to 数据结构/image/2021-03-12-21-08-07.png diff --git a/数据结构/2021-03-12-21-14-50.png b/数据结构/image/2021-03-12-21-14-50.png similarity index 100% rename from 数据结构/2021-03-12-21-14-50.png rename to 数据结构/image/2021-03-12-21-14-50.png diff --git a/数据结构/2021-03-12-21-14-57.png b/数据结构/image/2021-03-12-21-14-57.png similarity index 100% rename from 数据结构/2021-03-12-21-14-57.png rename to 数据结构/image/2021-03-12-21-14-57.png diff --git a/数据结构/2021-03-12-21-21-07.png b/数据结构/image/2021-03-12-21-21-07.png similarity index 100% rename from 数据结构/2021-03-12-21-21-07.png rename to 数据结构/image/2021-03-12-21-21-07.png diff --git a/数据结构/2021-03-12-21-22-43.png b/数据结构/image/2021-03-12-21-22-43.png similarity index 100% rename from 数据结构/2021-03-12-21-22-43.png rename to 数据结构/image/2021-03-12-21-22-43.png diff --git a/数据结构/2021-03-12-21-29-39.png b/数据结构/image/2021-03-12-21-29-39.png similarity index 100% rename from 数据结构/2021-03-12-21-29-39.png rename to 数据结构/image/2021-03-12-21-29-39.png diff --git a/数据结构/2021-03-12-21-29-49.png b/数据结构/image/2021-03-12-21-29-49.png similarity index 100% rename from 数据结构/2021-03-12-21-29-49.png rename to 数据结构/image/2021-03-12-21-29-49.png diff --git a/数据结构/2021-03-12-21-36-39.png b/数据结构/image/2021-03-12-21-36-39.png similarity index 100% rename from 数据结构/2021-03-12-21-36-39.png rename to 数据结构/image/2021-03-12-21-36-39.png diff --git a/数据结构/2021-03-12-21-43-29.png b/数据结构/image/2021-03-12-21-43-29.png similarity index 100% rename from 数据结构/2021-03-12-21-43-29.png rename to 数据结构/image/2021-03-12-21-43-29.png diff --git a/数据结构/2021-03-12-22-05-59.png b/数据结构/image/2021-03-12-22-05-59.png similarity index 100% rename from 数据结构/2021-03-12-22-05-59.png rename to 数据结构/image/2021-03-12-22-05-59.png diff --git a/数据结构/2021-03-12-22-07-20.png b/数据结构/image/2021-03-12-22-07-20.png similarity index 100% rename from 数据结构/2021-03-12-22-07-20.png rename to 数据结构/image/2021-03-12-22-07-20.png diff --git a/数据结构/2021-03-12-22-10-38.png b/数据结构/image/2021-03-12-22-10-38.png similarity index 100% rename from 数据结构/2021-03-12-22-10-38.png rename to 数据结构/image/2021-03-12-22-10-38.png diff --git a/数据结构/2021-03-12-22-12-08.png b/数据结构/image/2021-03-12-22-12-08.png similarity index 100% rename from 数据结构/2021-03-12-22-12-08.png rename to 数据结构/image/2021-03-12-22-12-08.png diff --git a/数据结构/2021-03-12-22-12-52.png b/数据结构/image/2021-03-12-22-12-52.png similarity index 100% rename from 数据结构/2021-03-12-22-12-52.png rename to 数据结构/image/2021-03-12-22-12-52.png diff --git a/数据结构/2021-03-12-22-16-50.png b/数据结构/image/2021-03-12-22-16-50.png similarity index 100% rename from 数据结构/2021-03-12-22-16-50.png rename to 数据结构/image/2021-03-12-22-16-50.png diff --git a/数据结构/2021-03-12-22-17-33.png b/数据结构/image/2021-03-12-22-17-33.png similarity index 100% rename from 数据结构/2021-03-12-22-17-33.png rename to 数据结构/image/2021-03-12-22-17-33.png diff --git a/数据结构/2021-03-12-22-46-59.png b/数据结构/image/2021-03-12-22-46-59.png similarity index 100% rename from 数据结构/2021-03-12-22-46-59.png rename to 数据结构/image/2021-03-12-22-46-59.png diff --git a/数据结构/2021-03-12-22-48-28.png b/数据结构/image/2021-03-12-22-48-28.png similarity index 100% rename from 数据结构/2021-03-12-22-48-28.png rename to 数据结构/image/2021-03-12-22-48-28.png diff --git a/数据结构/2021-03-12-22-53-43.png b/数据结构/image/2021-03-12-22-53-43.png similarity index 100% rename from 数据结构/2021-03-12-22-53-43.png rename to 数据结构/image/2021-03-12-22-53-43.png diff --git a/数据结构/2021-03-12-23-35-36.png b/数据结构/image/2021-03-12-23-35-36.png similarity index 100% rename from 数据结构/2021-03-12-23-35-36.png rename to 数据结构/image/2021-03-12-23-35-36.png diff --git a/数据结构/2021-03-12-23-39-19.png b/数据结构/image/2021-03-12-23-39-19.png similarity index 100% rename from 数据结构/2021-03-12-23-39-19.png rename to 数据结构/image/2021-03-12-23-39-19.png diff --git a/数据结构/2021-03-12-23-47-41.png b/数据结构/image/2021-03-12-23-47-41.png similarity index 100% rename from 数据结构/2021-03-12-23-47-41.png rename to 数据结构/image/2021-03-12-23-47-41.png diff --git a/数据结构/2021-03-12-23-47-46.png b/数据结构/image/2021-03-12-23-47-46.png similarity index 100% rename from 数据结构/2021-03-12-23-47-46.png rename to 数据结构/image/2021-03-12-23-47-46.png diff --git a/数据结构/2021-03-12-23-47-52.png b/数据结构/image/2021-03-12-23-47-52.png similarity index 100% rename from 数据结构/2021-03-12-23-47-52.png rename to 数据结构/image/2021-03-12-23-47-52.png diff --git a/数据结构/2021-03-12-23-51-37.png b/数据结构/image/2021-03-12-23-51-37.png similarity index 100% rename from 数据结构/2021-03-12-23-51-37.png rename to 数据结构/image/2021-03-12-23-51-37.png diff --git a/数据结构/2021-03-12-23-51-43.png b/数据结构/image/2021-03-12-23-51-43.png similarity index 100% rename from 数据结构/2021-03-12-23-51-43.png rename to 数据结构/image/2021-03-12-23-51-43.png diff --git a/数据结构/2021-03-12-23-51-51.png b/数据结构/image/2021-03-12-23-51-51.png similarity index 100% rename from 数据结构/2021-03-12-23-51-51.png rename to 数据结构/image/2021-03-12-23-51-51.png diff --git a/数据结构/2021-03-12-23-58-07.png b/数据结构/image/2021-03-12-23-58-07.png similarity index 100% rename from 数据结构/2021-03-12-23-58-07.png rename to 数据结构/image/2021-03-12-23-58-07.png diff --git a/数据结构/2021-03-12-23-58-14.png b/数据结构/image/2021-03-12-23-58-14.png similarity index 100% rename from 数据结构/2021-03-12-23-58-14.png rename to 数据结构/image/2021-03-12-23-58-14.png diff --git a/数据结构/2021-03-12-23-58-20.png b/数据结构/image/2021-03-12-23-58-20.png similarity index 100% rename from 数据结构/2021-03-12-23-58-20.png rename to 数据结构/image/2021-03-12-23-58-20.png diff --git a/数据结构/2021-03-12-23-58-29.png b/数据结构/image/2021-03-12-23-58-29.png similarity index 100% rename from 数据结构/2021-03-12-23-58-29.png rename to 数据结构/image/2021-03-12-23-58-29.png diff --git a/数据结构/2021-03-13-00-03-01.png b/数据结构/image/2021-03-13-00-03-01.png similarity index 100% rename from 数据结构/2021-03-13-00-03-01.png rename to 数据结构/image/2021-03-13-00-03-01.png diff --git a/数据结构/2021-03-13-00-03-07.png b/数据结构/image/2021-03-13-00-03-07.png similarity index 100% rename from 数据结构/2021-03-13-00-03-07.png rename to 数据结构/image/2021-03-13-00-03-07.png diff --git a/数据结构/2021-03-13-00-03-13.png b/数据结构/image/2021-03-13-00-03-13.png similarity index 100% rename from 数据结构/2021-03-13-00-03-13.png rename to 数据结构/image/2021-03-13-00-03-13.png diff --git a/数据结构/2021-03-13-00-03-30.png b/数据结构/image/2021-03-13-00-03-30.png similarity index 100% rename from 数据结构/2021-03-13-00-03-30.png rename to 数据结构/image/2021-03-13-00-03-30.png diff --git a/数据结构/2021-03-13-00-07-04.png b/数据结构/image/2021-03-13-00-07-04.png similarity index 100% rename from 数据结构/2021-03-13-00-07-04.png rename to 数据结构/image/2021-03-13-00-07-04.png diff --git a/数据结构/2021-03-13-00-15-09.png b/数据结构/image/2021-03-13-00-15-09.png similarity index 100% rename from 数据结构/2021-03-13-00-15-09.png rename to 数据结构/image/2021-03-13-00-15-09.png diff --git a/数据结构/2021-03-13-00-15-45.png b/数据结构/image/2021-03-13-00-15-45.png similarity index 100% rename from 数据结构/2021-03-13-00-15-45.png rename to 数据结构/image/2021-03-13-00-15-45.png diff --git a/数据结构/2021-03-13-00-16-39.png b/数据结构/image/2021-03-13-00-16-39.png similarity index 100% rename from 数据结构/2021-03-13-00-16-39.png rename to 数据结构/image/2021-03-13-00-16-39.png diff --git a/数据结构/2021-03-13-00-18-58.png b/数据结构/image/2021-03-13-00-18-58.png similarity index 100% rename from 数据结构/2021-03-13-00-18-58.png rename to 数据结构/image/2021-03-13-00-18-58.png diff --git a/数据结构/2021-03-13-00-23-57.png b/数据结构/image/2021-03-13-00-23-57.png similarity index 100% rename from 数据结构/2021-03-13-00-23-57.png rename to 数据结构/image/2021-03-13-00-23-57.png diff --git a/数据结构/2021-03-13-00-25-14.png b/数据结构/image/2021-03-13-00-25-14.png similarity index 100% rename from 数据结构/2021-03-13-00-25-14.png rename to 数据结构/image/2021-03-13-00-25-14.png diff --git a/数据结构/2021-03-13-00-29-43.png b/数据结构/image/2021-03-13-00-29-43.png similarity index 100% rename from 数据结构/2021-03-13-00-29-43.png rename to 数据结构/image/2021-03-13-00-29-43.png diff --git a/数据结构/2021-03-13-00-30-58.png b/数据结构/image/2021-03-13-00-30-58.png similarity index 100% rename from 数据结构/2021-03-13-00-30-58.png rename to 数据结构/image/2021-03-13-00-30-58.png diff --git a/数据结构/2021-03-13-12-51-08.png b/数据结构/image/2021-03-13-12-51-08.png similarity index 100% rename from 数据结构/2021-03-13-12-51-08.png rename to 数据结构/image/2021-03-13-12-51-08.png diff --git a/数据结构/2021-03-13-12-53-35.png b/数据结构/image/2021-03-13-12-53-35.png similarity index 100% rename from 数据结构/2021-03-13-12-53-35.png rename to 数据结构/image/2021-03-13-12-53-35.png diff --git a/数据结构/2021-03-13-14-06-44.png b/数据结构/image/2021-03-13-14-06-44.png similarity index 100% rename from 数据结构/2021-03-13-14-06-44.png rename to 数据结构/image/2021-03-13-14-06-44.png diff --git a/数据结构/2021-03-13-14-09-24.png b/数据结构/image/2021-03-13-14-09-24.png similarity index 100% rename from 数据结构/2021-03-13-14-09-24.png rename to 数据结构/image/2021-03-13-14-09-24.png diff --git a/数据结构/2021-03-13-14-10-25.png b/数据结构/image/2021-03-13-14-10-25.png similarity index 100% rename from 数据结构/2021-03-13-14-10-25.png rename to 数据结构/image/2021-03-13-14-10-25.png diff --git a/数据结构/2021-03-13-14-10-40.png b/数据结构/image/2021-03-13-14-10-40.png similarity index 100% rename from 数据结构/2021-03-13-14-10-40.png rename to 数据结构/image/2021-03-13-14-10-40.png diff --git a/数据结构/2021-03-13-14-25-55.png b/数据结构/image/2021-03-13-14-25-55.png similarity index 100% rename from 数据结构/2021-03-13-14-25-55.png rename to 数据结构/image/2021-03-13-14-25-55.png diff --git a/数据结构/2021-03-13-14-28-34.png b/数据结构/image/2021-03-13-14-28-34.png similarity index 100% rename from 数据结构/2021-03-13-14-28-34.png rename to 数据结构/image/2021-03-13-14-28-34.png diff --git a/数据结构/2021-03-13-14-29-50.png b/数据结构/image/2021-03-13-14-29-50.png similarity index 100% rename from 数据结构/2021-03-13-14-29-50.png rename to 数据结构/image/2021-03-13-14-29-50.png diff --git a/数据结构/2021-03-13-14-30-35.png b/数据结构/image/2021-03-13-14-30-35.png similarity index 100% rename from 数据结构/2021-03-13-14-30-35.png rename to 数据结构/image/2021-03-13-14-30-35.png diff --git a/数据结构/2021-03-13-14-43-51.png b/数据结构/image/2021-03-13-14-43-51.png similarity index 100% rename from 数据结构/2021-03-13-14-43-51.png rename to 数据结构/image/2021-03-13-14-43-51.png diff --git a/数据结构/2021-03-13-14-44-34.png b/数据结构/image/2021-03-13-14-44-34.png similarity index 100% rename from 数据结构/2021-03-13-14-44-34.png rename to 数据结构/image/2021-03-13-14-44-34.png diff --git a/数据结构/2021-03-13-15-23-14.png b/数据结构/image/2021-03-13-15-23-14.png similarity index 100% rename from 数据结构/2021-03-13-15-23-14.png rename to 数据结构/image/2021-03-13-15-23-14.png diff --git a/数据结构/2021-03-13-15-23-24.png b/数据结构/image/2021-03-13-15-23-24.png similarity index 100% rename from 数据结构/2021-03-13-15-23-24.png rename to 数据结构/image/2021-03-13-15-23-24.png diff --git a/数据结构/2021-03-13-15-25-15.png b/数据结构/image/2021-03-13-15-25-15.png similarity index 100% rename from 数据结构/2021-03-13-15-25-15.png rename to 数据结构/image/2021-03-13-15-25-15.png diff --git a/数据结构/2021-03-13-15-31-06.png b/数据结构/image/2021-03-13-15-31-06.png similarity index 100% rename from 数据结构/2021-03-13-15-31-06.png rename to 数据结构/image/2021-03-13-15-31-06.png diff --git a/数据结构/2021-03-13-15-43-40.png b/数据结构/image/2021-03-13-15-43-40.png similarity index 100% rename from 数据结构/2021-03-13-15-43-40.png rename to 数据结构/image/2021-03-13-15-43-40.png diff --git a/数据结构/2021-03-13-15-43-53.png b/数据结构/image/2021-03-13-15-43-53.png similarity index 100% rename from 数据结构/2021-03-13-15-43-53.png rename to 数据结构/image/2021-03-13-15-43-53.png diff --git a/数据结构/2021-03-13-16-01-31.png b/数据结构/image/2021-03-13-16-01-31.png similarity index 100% rename from 数据结构/2021-03-13-16-01-31.png rename to 数据结构/image/2021-03-13-16-01-31.png diff --git a/数据结构/2021-03-13-16-02-28.png b/数据结构/image/2021-03-13-16-02-28.png similarity index 100% rename from 数据结构/2021-03-13-16-02-28.png rename to 数据结构/image/2021-03-13-16-02-28.png diff --git a/数据结构/2021-03-13-16-12-10.png b/数据结构/image/2021-03-13-16-12-10.png similarity index 100% rename from 数据结构/2021-03-13-16-12-10.png rename to 数据结构/image/2021-03-13-16-12-10.png diff --git a/数据结构/2021-03-13-16-28-06.png b/数据结构/image/2021-03-13-16-28-06.png similarity index 100% rename from 数据结构/2021-03-13-16-28-06.png rename to 数据结构/image/2021-03-13-16-28-06.png diff --git a/数据结构/2021-03-13-16-32-02.png b/数据结构/image/2021-03-13-16-32-02.png similarity index 100% rename from 数据结构/2021-03-13-16-32-02.png rename to 数据结构/image/2021-03-13-16-32-02.png diff --git a/数据结构/2021-03-13-16-32-17.png b/数据结构/image/2021-03-13-16-32-17.png similarity index 100% rename from 数据结构/2021-03-13-16-32-17.png rename to 数据结构/image/2021-03-13-16-32-17.png diff --git a/数据结构/2021-03-13-17-02-40.png b/数据结构/image/2021-03-13-17-02-40.png similarity index 100% rename from 数据结构/2021-03-13-17-02-40.png rename to 数据结构/image/2021-03-13-17-02-40.png diff --git a/数据结构/双链表的数据存储.png b/数据结构/image/双链表的数据存储.png similarity index 100% rename from 数据结构/双链表的数据存储.png rename to 数据结构/image/双链表的数据存储.png diff --git a/数据结构/堆栈.png b/数据结构/image/堆栈.png similarity index 100% rename from 数据结构/堆栈.png rename to 数据结构/image/堆栈.png diff --git a/数据结构/循环单向链表.png b/数据结构/image/循环单向链表.png similarity index 100% rename from 数据结构/循环单向链表.png rename to 数据结构/image/循环单向链表.png diff --git a/数据结构/循环双向链表内存.png b/数据结构/image/循环双向链表内存.png similarity index 100% rename from 数据结构/循环双向链表内存.png rename to 数据结构/image/循环双向链表内存.png diff --git a/数据结构/循环队列.png b/数据结构/image/循环队列.png similarity index 100% rename from 数据结构/循环队列.png rename to 数据结构/image/循环队列.png diff --git a/数据结构/数据结构与算法.jpeg b/数据结构/image/数据结构与算法.jpeg similarity index 100% rename from 数据结构/数据结构与算法.jpeg rename to 数据结构/image/数据结构与算法.jpeg diff --git a/数据结构/树.png b/数据结构/image/树.png similarity index 100% rename from 数据结构/树.png rename to 数据结构/image/树.png diff --git a/数据结构/sort.md b/数据结构/sort.md deleted file mode 100644 index 85d80a2b..00000000 --- a/数据结构/sort.md +++ /dev/null @@ -1,923 +0,0 @@ -# 细说排序算法 - -> 📦 本文已归档到:「[blog](https://github.com/dunwu/blog/tree/master/source/_posts/algorithm)」 -> -> 🔁 本文中的示例代码已归档到:「[algorithm-tutorial](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java)」 - - - -- [冒泡排序](#冒泡排序) - - [要点](#要点) - - [算法思想](#算法思想) - - [算法分析](#算法分析) - - [示例代码](#示例代码) -- [快速排序](#快速排序) - - [要点](#要点-1) - - [算法思想](#算法思想-1) - - [算法分析](#算法分析-1) - - [示例代码](#示例代码-1) -- [插入排序](#插入排序) - - [要点](#要点-2) - - [算法思想](#算法思想-2) - - [算法分析](#算法分析-2) - - [示例代码](#示例代码-2) -- [希尔排序](#希尔排序) - - [要点](#要点-3) - - [算法思想](#算法思想-3) - - [算法分析](#算法分析-3) - - [示例代码](#示例代码-3) -- [简单选择排序](#简单选择排序) - - [要点](#要点-4) - - [算法思想](#算法思想-4) - - [算法分析](#算法分析-4) - - [示例代码](#示例代码-4) -- [堆排序](#堆排序) - - [要点](#要点-5) - - [算法思想](#算法思想-5) - - [算法分析](#算法分析-5) - - [示例代码](#示例代码-5) -- [归并排序](#归并排序) - - [要点](#要点-6) - - [算法思想](#算法思想-6) - - [算法分析](#算法分析-6) - - [示例代码](#示例代码-6) -- [基数排序](#基数排序) - - [要点](#要点-7) - - [算法分析](#算法分析-7) - - [示例代码](#示例代码-7) - - - -## 冒泡排序 - -### 要点 - -冒泡排序是一种交换排序。 - -什么是交换排序呢? - -> 交换排序:两两比较待排序的关键字,并交换不满足次序要求的那对数,直到整个表都满足次序要求为止。 - -### 算法思想 - -它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 - -这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。 - -假设有一个大小为 N 的无序序列。冒泡排序就是要每趟排序过程中通过两两比较,找到第 i 个小(大)的元素,将其往上排。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/bubble-sort.png!zp) - -以上图为例,演示一下冒泡排序的实际流程: - -假设有一个无序序列 { 4. 3. 1. 2, 5 } - -- 第一趟排序:通过两两比较,找到第一小的数值 1 ,将其放在序列的第一位。 -- 第二趟排序:通过两两比较,找到第二小的数值 2 ,将其放在序列的第二位。 -- 第三趟排序:通过两两比较,找到第三小的数值 3 ,将其放在序列的第三位。 - -至此,所有元素已经有序,排序结束。 - -要将以上流程转化为代码,我们需要像机器一样去思考,不然编译器可看不懂。 - -- 假设要对一个大小为 N 的无序序列进行升序排序(即从小到大)。 - - 每趟排序过程中需要通过比较找到第 i 个小的元素。 - - 所以,我们需要一个外部循环,从数组首端(下标 0) 开始,一直扫描到倒数第二个元素(即下标 N - 2) ,剩下最后一个元素,必然为最大。 -- 假设是第 i 趟排序,可知,前 i-1 个元素已经有序。现在要找第 i 个元素,只需从数组末端开始,扫描到第 i 个元素,将它们两两比较即可。 - - 所以,需要一个内部循环,从数组末端开始(下标 N - 1),扫描到 (下标 i + 1)。 - -**核心代码** - -```java -public void bubbleSort(int[] list) { - int temp = 0; // 用来交换的临时数 - - // 要遍历的次数 - for (int i = 0; i < list.length - 1; i++) { - // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上 - for (int j = list.length - 1; j > i; j--) { - // 比较相邻的元素,如果前面的数大于后面的数,则交换 - if (list[j - 1] > list[j]) { - temp = list[j - 1]; - list[j - 1] = list[j]; - list[j] = temp; - } - } - - System.out.format("第 %d 趟:\t", i); - printAll(list); - } -} -``` - -### 算法分析 - -**冒泡排序算法的性能** - -| 参数 | 结果 | -| ------------------ | -------- | -| 排序类别 | 交换排序 | -| 排序方法 | 冒泡排序 | -| 时间复杂度平均情况 | O(N2) | -| 时间复杂度最坏情况 | O(N3) | -| 时间复杂度最好情况 | O(N) | -| 空间复杂度 | O(1) | -| 稳定性 | 稳定 | -| 复杂性 | 简单 | - -#### 时间复杂度 - -若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数 C 和记录移动次数 M 均达到最小值:Cmin = N - 1, Mmin = 0。所以,冒泡排序最好时间复杂度为 O(N)。 - -若初始文件是反序的,需要进行 N -1 趟排序。每趟排序要进行 N - i 次关键字的比较(1 ≤ i ≤ N - 1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: - -Cmax = N(N-1)/2 = O(N2) - -Mmax = 3N(N-1)/2 = O(N2) - -冒泡排序的最坏时间复杂度为 O(N2)。 - -因此,冒泡排序的平均时间复杂度为 O(N2)。 - -总结起来,其实就是一句话:当数据越接近正序时,冒泡排序性能越好。 - -#### 算法稳定性 - -冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。 - -所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。 - -#### 优化 - -对冒泡排序常见的改进方法是加入标志性变量 exchange,用于标志某一趟排序过程中是否有数据交换。 - -如果进行某一趟排序时并没有进行数据交换,则说明所有数据已经有序,可立即结束排序,避免不必要的比较过程。 - -**核心代码** - -```java -// 对 bubbleSort 的优化算法 -public void bubbleSort_2(int[] list) { - int temp = 0; // 用来交换的临时数 - boolean bChange = false; // 交换标志 - - // 要遍历的次数 - for (int i = 0; i < list.length - 1; i++) { - bChange = false; - // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上 - for (int j = list.length - 1; j > i; j--) { - // 比较相邻的元素,如果前面的数大于后面的数,则交换 - if (list[j - 1] > list[j]) { - temp = list[j - 1]; - list[j - 1] = list[j]; - list[j] = temp; - bChange = true; - } - } - - // 如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序 - if (false == bChange) - break; - - System.out.format("第 %d 趟:\t", i); - printAll(list); - } -} -``` - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 快速排序 - -### 要点 - -> 快速排序是一种交换排序。 - -快速排序由 C. A. R. Hoare 在 1962 年提出。 - -### 算法思想 - -它的基本思想是: - -通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。 - -然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 - -详细的图解往往比大堆的文字更有说明力,所以直接上图: - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/quick-sort.png!zp) - -上图中,演示了快速排序的处理过程: - -1. 初始状态为一组无序的数组:2、4、5、1、3。 -2. 经过以上操作步骤后,完成了第一次的排序,得到新的数组:1、2、5、4、3。 -3. 新的数组中,以 2 为分割点,左边都是比 2 小的数,右边都是比 2 大的数。 -4. 因为 2 已经在数组中找到了合适的位置,所以不用再动。 -5. 2 左边的数组只有一个元素 1,所以显然不用再排序,位置也被确定。(注:这种情况时,left 指针和 right 指针显然是重合的。因此在代码中,我们可以通过设置判定条件 left 必须小于 right,如果不满足,则不用排序了)。 -6. 而对于 2 右边的数组 5、4、3,设置 left 指向 5,right 指向 3,开始继续重复图中的一、二、三、四步骤,对新的数组进行排序。 - -**核心代码** - -```java -public int division(int[] list, int left, int right) { - // 以最左边的数(left)为基准 - int base = list[left]; - while (left < right) { - // 从序列右端开始,向左遍历,直到找到小于base的数 - while (left < right && list[right] >= base) - right--; - // 找到了比base小的元素,将这个元素放到最左边的位置 - list[left] = list[right]; - - // 从序列左端开始,向右遍历,直到找到大于base的数 - while (left < right && list[left] <= base) - left++; - // 找到了比base大的元素,将这个元素放到最右边的位置 - list[right] = list[left]; - } - - // 最后将base放到left位置。此时,left位置的左侧数值应该都比left小; - // 而left位置的右侧数值应该都比left大。 - list[left] = base; - return left; -} - -private void quickSort(int[] list, int left, int right) { - - // 左下标一定小于右下标,否则就越界了 - if (left < right) { - // 对数组进行分割,取出下次分割的基准标号 - int base = division(list, left, right); - - System.out.format("base = %d:\t", list[base]); - printPart(list, left, right); - - // 对“基准标号“左侧的一组数值进行递归的切割,以至于将这些数值完整的排序 - quickSort(list, left, base - 1); - - // 对“基准标号“右侧的一组数值进行递归的切割,以至于将这些数值完整的排序 - quickSort(list, base + 1, right); - } -} -``` - -### 算法分析 - -快速排序算法的性能 - -| 参数 | 结果 | -| ------------------ | --------- | -| 排序类别 | 交换排序 | -| 排序方法 | 快速排序 | -| 时间复杂度平均情况 | O(Nlog2N) | -| 时间复杂度最坏情况 | O(N2) | -| 时间复杂度最好情况 | O(Nlog2N) | -| 空间复杂度 | O(Nlog2N) | -| 稳定性 | 不稳定 | -| 复杂性 | 较复杂 | - -#### 时间复杂度 - -当数据有序时,以第一个关键字为基准分为两个子序列,前一个子序列为空,此时执行效率最差。 - -而当数据随机分布时,以第一个关键字为基准分为两个子序列,两个子序列的元素个数接近相等,此时执行效率最好。 - -所以,数据越随机分布时,快速排序性能越好;数据越接近有序,快速排序性能越差。 - -#### 空间复杂度 - -快速排序在每次分割的过程中,需要 1 个空间存储基准值。而快速排序的大概需要 Nlog2N 次的分割处理,所以占用空间也是 Nlog2N 个。 - -#### 算法稳定性 - -在快速排序中,相等元素可能会因为分区而交换顺序,所以它是不稳定的算法。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 插入排序 - -### 要点 - -> 直接插入排序是一种最简单的**插入排序**。 -> -> **插入排序**:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 - -### 算法思想 - -在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/insert-sort.png!zp) - -- 先拿一张 5 在手里, -- 再摸到一张 4,比 5 小,插到 5 前面, -- 摸到一张 6,嗯,比 5 大,插到 5 后面, -- 摸到一张 8,比 6 大,插到 6 后面, -- 。。。 -- 最后一看,我靠,凑到的居然是同花顺,这下牛逼大了。 - -以上的过程,其实就是典型的**直接插入排序,每次将一个新数据插入到有序队列中的合适位置里**。 - -很简单吧,接下来,我们要将这个算法转化为编程语言。 - -假设有一组无序序列 R0, R1, ... , RN-1。 - -- 我们先将这个序列中下标为 0 的元素视为元素个数为 1 的有序序列。 -- 然后,我们要依次把 R1, R2, ... , RN-1 插入到这个有序序列中。所以,我们需要一个**外部循环**,从下标 1 扫描到 N-1 。 -- 接下来描述插入过程。假设这是要将 Ri 插入到前面有序的序列中。由前面所述,我们可知,插入 Ri 时,前 i-1 个数肯定已经是有序了。 - -所以我们需要将 Ri 和 R0 \~ Ri-1 进行比较,确定要插入的合适位置。这就需要一个**内部循环**,我们一般是从后往前比较,即从下标 i-1 开始向 0 进行扫描。 - -**核心代码** - -```java -public void insertSort(int[] list) { - // 打印第一个元素 - System.out.format("i = %d:\t", 0); - printPart(list, 0, 0); - - // 第1个数肯定是有序的,从第2个数开始遍历,依次插入有序序列 - for (int i = 1; i < list.length; i++) { - int j = 0; - int temp = list[i]; // 取出第i个数,和前i-1个数比较后,插入合适位置 - - // 因为前i-1个数都是从小到大的有序序列,所以只要当前比较的数(list[j])比temp大,就把这个数后移一位 - for (j = i - 1; j >= 0 && temp < list[j]; j--) { - list[j + 1] = list[j]; - } - list[j + 1] = temp; - - System.out.format("i = %d:\t", i); - printPart(list, 0, i); - } -} -``` - -### 算法分析 - -**直接插入排序的算法性能** - -| 参数 | 结果 | -| ------------------ | ------------ | -| 排序类别 | 插入排序 | -| 排序方法 | 直接插入排序 | -| 时间复杂度平均情况 | O(N2) | -| 时间复杂度最坏情况 | O(N2) | -| 时间复杂度最好情况 | O(N) | -| 空间复杂度 | O(1) | -| 稳定性 | 稳定 | -| 复杂性 | 简单 | - -#### 时间复杂度 - -当数据**正序**时,执行效率**最好**,每次插入都不用移动前面的元素,时间复杂度为 **O(N)**。 - -当数据**反序**时,执行效率**最差**,每次插入都要前面的元素后移,时间复杂度为 **O(N2)**。 - -所以,**数据越接近正序,直接插入排序的算法性能越好**。 - -#### 空间复杂度 - -由直接插入排序算法可知,我们在排序过程中,需要一个临时变量存储要插入的值,所以空间复杂度为 **1** 。 - -#### 算法稳定性 - -直接插入排序的过程中,不需要改变相等数值元素的位置,所以它是**稳定的**算法。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 希尔排序 - -### 要点 - -> 希尔(Shell)排序又称为**缩小增量排序**,它是一种**插入排序**。它**是直接插入排序算法的一种威力加强版**。 - -该方法因 DL.Shell 于 1959 年提出而得名。 - -### 算法思想 - -希尔排序的**基本思想**是: - -把记录按**步长 gap** 分组,对每组记录采用**直接插入排序**方法进行排序。 -随着**步长逐渐减小**,所分成的组包含的记录越来越多,当步长的值减小到 **1** 时,整个数据合成为一组,构成一组有序记录,则完成排序。 - -我们来通过演示图,更深入的理解一下这个过程。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/shell-sort.png!zp) - -在上面这幅图中: - -初始时,有一个大小为 10 的无序序列。 - -- 在**第一趟排序中**,我们不妨设 gap1 = N / 2 = 5,即相隔距离为 5 的元素组成一组,可以分为 5 组。 - - 接下来,按照直接插入排序的方法对每个组进行排序。 -- 在** 第二趟排序中**,我们把上次的 gap 缩小一半,即 gap2 = gap1 / 2 = 2 (取整数)。这样每相隔距离为 2 的元素组成一组,可以分为 2 组。 - - 按照直接插入排序的方法对每个组进行排序。 -- 在**第三趟排序中**,再次把 gap 缩小一半,即 gap3 = gap2 / 2 = 1。 这样相隔距离为 1 的元素组成一组,即只有一组。 - - 按照直接插入排序的方法对每个组进行排序。此时,**排序已经结束**。 - -需要注意一下的是,图中有两个相等数值的元素 **5** 和 **5** 。我们可以清楚的看到,在排序过程中,**两个元素位置交换了**。 - -所以,希尔排序是不稳定的算法。 - -**核心代码** - -```java -public void shellSort(int[] list) { - int gap = list.length / 2; - - while (1 <= gap) { - // 把距离为 gap 的元素编为一个组,扫描所有组 - for (int i = gap; i < list.length; i++) { - int j = 0; - int temp = list[i]; - - // 对距离为 gap 的元素组进行排序 - for (j = i - gap; j >= 0 && temp < list[j]; j = j - gap) { - list[j + gap] = list[j]; - } - list[j + gap] = temp; - } - - System.out.format("gap = %d:\t", gap); - printAll(list); - gap = gap / 2; // 减小增量 - } -} -``` - -### 算法分析 - -**希尔排序的算法性能** - -| 参数 | 结果 | -| ------------------ | --------- | -| 排序类别 | 插入排序 | -| 排序方法 | 希尔排序 | -| 时间复杂度平均情况 | O(Nlog2N) | -| 时间复杂度最坏情况 | O(N1.5) | -| 时间复杂度最好情况 | | -| 空间复杂度 | O(1) | -| 稳定性 | 不稳定 | -| 复杂性 | 较复杂 | - -#### 时间复杂度 - -步长的选择是希尔排序的重要部分。只要最终步长为 1 任何步长序列都可以工作。 - -算法最开始以一定的步长进行排序。然后会继续以一定步长进行排序,最终算法以步长为 1 进行排序。当步长为 1 时,算法变为插入排序,这就保证了数据一定会被排序。 - -Donald Shell 最初建议步长选择为 N/2 并且对步长取半直到步长达到 1。虽然这样取可以比 O(N2)类的算法(插入排序)更好,但这样仍然有减少平均时间和最差时间的余地。可能希尔排序最重要的地方在于当用较小步长排序后,以前用的较大步长仍然是有序的。比如,如果一个数列以步长 5 进行了排序然后再以步长 3 进行排序,那么该数列不仅是以步长 3 有序,而且是以步长 5 有序。如果不是这样,那么算法在迭代过程中会打乱以前的顺序,那就不会以如此短的时间完成排序了。 - -已知的最好步长序列是由 Sedgewick 提出的(1, 5, 19, 41, 109,...),该序列的项来自这两个算式。 - -这项研究也表明“比较在希尔排序中是最主要的操作,而不是交换。”用这样步长序列的希尔排序比插入排序和堆排序都要快,甚至在小数组中比快速排序还快,但是在涉及大量数据时希尔排序还是比快速排序慢。 - -#### 算法稳定性 - -由上文的**希尔排序算法演示图**即可知,希尔排序中相等数据可能会交换位置,所以希尔排序是**不稳定**的算法。 - -#### 直接插入排序和希尔排序的比较 - -- 直接插入排序是**稳定的**;而希尔排序是**不稳定**的。 -- 直接插入排序更适合于原始记录基本**有序**的集合。 -- 希尔排序的比较次数和移动次数都要比直接插入排序少,当 N 越大时,效果越明显。 -- 在希尔排序中,增量序列 gap 的取法必须满足:**最后一个步长必须是 1 。 ** -- 直接插入排序也**适用于链式存储结构**;希尔排序**不适用于链式结构**。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 简单选择排序 - -### 要点 - -> 简单选择排序是一种**选择排序**。 -> -> **选择排序**:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 - -### 算法思想 - -1. 从待排序序列中,找到关键字最小的元素; -2. 如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换; -3. 从余下的 N - 1 个元素中,找出关键字最小的元素,重复 1、2 步,直到排序结束。 - -如图所示,每趟排序中,将当前**第 i 小的元素放在位置 i **上。 - -**核心代码** - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/selection-sort.png!zp) - -### 算法分析 - -**简单选择排序算法的性能** - -| 参数 | 结果 | -| ------------------ | ------------ | -| 排序类别 | 选择排序 | -| 排序方法 | 简单选择排序 | -| 时间复杂度平均情况 | O(N2) | -| 时间复杂度最坏情况 | O(N2) | -| 时间复杂度最好情况 | O(N2) | -| 空间复杂度 | O(1) | -| 稳定性 | 不稳定 | -| 复杂性 | 简单 | - -#### 时间复杂度 - -简单选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 **N** 个元素,则**比较次数总是 N (N - 1) / 2 **。 - -而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 **0**. - -当序列反序时,移动次数最多,为 **3N (N - 1) / 2**。 - -所以,综合以上,简单排序的时间复杂度为 **O(N2)**。 - -#### 空间复杂度 - -简单选择排序需要占用一个临时空间,在交换数值时使用。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 堆排序 - -### 要点 - -在介绍堆排序之前,首先需要说明一下,堆是个什么玩意儿。 - -**堆**是一棵**顺序存储**的**完全二叉树**。 - -其中每个结点的关键字都**不大于**其孩子结点的关键字,这样的堆称为**小根堆**。 -其中每个结点的关键字都**不小于**其孩子结点的关键字,这样的堆称为**大根堆**。 -举例来说,对于 n 个元素的序列 {R0, R1, ... , Rn} 当且仅当满足下列关系之一时,称之为堆: - -- **Ri <= R2i+1 且 Ri <= R2i+2 (小根堆)** -- **Ri >= R2i+1 且 Ri >= R2i+2 (大根堆)** - -其中 i=1,2,…,n/2 向下取整; - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/heap-sort.png!zp) - -如上图所示,序列 R{3, 8,15, 31, 25} 是一个典型的小根堆。 - -堆中有两个父结点,元素 3 和元素 8。 - -元素 3 在数组中以 R[0] 表示,它的左孩子结点是 R[1],右孩子结点是 R[2]。 - -元素 8 在数组中以 R[1] 表示,它的左孩子结点是 R[3],右孩子结点是 R[4],它的父结点是 R[0]。可以看出,它们**满足以下规律**: - -设当前元素在数组中以 **R[i]** 表示,那么, - -- 它的**左孩子结点**是:**R[2\*i+1]**; -- 它的**右孩子结点**是:**R[2\*i+2]**; -- 它的**父结点**是:**R[(i-1)/2]**; -- R[i] <= R[2*i+1] 且 R[i] <= R[2i+2]。 - -### 算法思想 - -- 首先,按堆的定义将数组 R[0..n]调整为堆(这个过程称为创建初始堆),交换 R[0]和 R[n]; -- 然后,将 R[0..n-1]调整为堆,交换 R[0]和 R[n-1]; -- 如此反复,直到交换了 R[0]和 R[1]为止。 - -以上思想可归纳为两个操作: - -1. 根据初始数组去**构造初始堆**(构建一个完全二叉树,保证所有的父结点都比它的孩子结点数值大)。 -2. 每次**交换第一个和最后一个元素,输出最后一个元素**(最大值),然后把剩下元素**重新调整**为大根堆。 - -当输出完最后一个元素后,这个数组已经是按照从小到大的顺序排列了。 - -先通过详细的实例图来看一下,如何构建初始堆。 - -设有一个无序序列 { 1, 3,4, 5, 2, 6, 9, 7, 8, 0 }。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/heap-sort-02.png!zp) - -构造了初始堆后,我们来看一下完整的堆排序处理: - -还是针对前面提到的无序序列 { 1,3, 4, 5, 2, 6, 9, 7, 8, 0 } 来加以说明。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/heap-sort-03.png!zp) - -相信,通过以上两幅图,应该能很直观的演示堆排序的操作处理。 - -**核心代码** - -```java -public void HeapAdjust(int[] array2, int parent, int length) { - int temp = array2[parent]; // temp保存当前父节点 - int child = 2 * parent + 1; // 先获得左孩子 - - while (child < length) { - // 如果有右孩子结点,并且右孩子结点的值大于左孩子结点,则选取右孩子结点 - if (child + 1 < length && array2[child] < array2[child + 1]) { - child++; - } - - // 如果父结点的值已经大于孩子结点的值,则直接结束 - if (temp >= array2[child]) - break; - - // 把孩子结点的值赋给父结点 - array2[parent] = array2[child]; - - // 选取孩子结点的左孩子结点,继续向下筛选 - parent = child; - child = 2 * child + 1; - } - - array2[parent] = temp; -} - -public void heapSort(int[] list) { - // 循环建立初始堆 - for (int i = list.length / 2; i >= 0; i--) { - HeapAdjust(list, i, list.length); - } - - // 进行n-1次循环,完成排序 - for (int i = list.length - 1; i > 0; i--) { - // 最后一个元素和第一元素进行交换 - int temp = list[i]; - list[i] = list[0]; - list[0] = temp; - - // 筛选 R[0] 结点,得到i-1个结点的堆 - HeapAdjust(list, 0, i); - System.out.format("第 %d 趟: \t", list.length - i); - printPart(list, 0, list.length - 1); - } -} -``` - -### 算法分析 - -**堆排序算法的总体情况** - -| 参数 | 结果 | -| ------------------ | --------- | -| 排序类别 | 选择排序 | -| 排序方法 | 堆排序 | -| 时间复杂度平均情况 | O(nlog2n) | -| 时间复杂度最坏情况 | O(nlog2n) | -| 时间复杂度最好情况 | O(nlog2n) | -| 空间复杂度 | O(1) | -| 稳定性 | 不稳定 | -| 复杂性 | 较复杂 | - -#### 时间复杂度 - -堆的存储表示是**顺序的**。因为堆所对应的二叉树为完全二叉树,而完全二叉树通常采用顺序存储方式。 - -当想得到一个序列中第 **k** 个最小的元素之前的部分排序序列,最好采用堆排序。 - -因为堆排序的时间复杂度是 **O(n+klog2n)**,若 **k ≤ n/log2n**,则可得到的时间复杂度为 **O(n)**。 - -#### 算法稳定性 - -堆排序是一种**不稳定**的排序方法。 - -因为在堆的调整过程中,关键字进行比较和交换所走的是该结点到叶子结点的一条路径, - -因此对于相同的关键字就可能出现排在后面的关键字被交换到前面来的情况。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 归并排序 - -### 要点 - -> 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用**分治法(Divide and Conquer)**的一个非常典型的应用。 -> -> 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为**二路归并**。 - -### 算法思想 - -将待排序序列 R[0...n-1] 看成是 n 个长度为 1 的有序序列,将相邻的有序表成对归并,得到 n/2 个长度为 2 的有序表;将这些有序序列再次归并,得到 n/4 个长度为 4 的有序序列;如此反复进行下去,最后得到一个长度为 n 的有序序列。 - -综上可知: - -归并排序其实要做两件事: - -- “分解”——将序列每次**折半划分**。 -- “合并”——将划分后的序列段**两两合并后排序**。 - -我们先来考虑第二步,**如何合并**? - -在每次合并过程中,都是对两个有序的序列段进行合并,然后排序。 - -这两个有序序列段分别为 R[low, mid] 和 R[mid+1, high]。 - -先将他们合并到一个局部的**暂存数组**R2 中,带合并完成后再将 R2 复制回 R 中。 - -为了方便描述,我们称 R[low, mid] 第一段,R[mid+1, high] 为第二段。 - -每次从两个段中取出一个记录进行关键字的比较,将较小者放入 R2 中。最后将各段中余下的部分直接复制到 R2 中。 - -经过这样的过程,R2 已经是一个有序的序列,再将其复制回 R 中,一次合并排序就完成了。 - -**核心代码** - -```java -public void Merge(int[] array2, int low, int mid, int high) { - int i = low; // i是第一段序列的下标 - int j = mid + 1; // j是第二段序列的下标 - int k = 0; // k是临时存放合并序列的下标 - int[] array2 = new int[high - low + 1]; // array2是临时合并序列 - - // 扫描第一段和第二段序列,直到有一个扫描结束 - while (i <= mid && j <= high) { - // 判断第一段和第二段取出的数哪个更小,将其存入合并序列,并继续向下扫描 - if (array2[i] <= array2[j]) { - array2[k] = array2[i]; - i++; - k++; - } else { - array2[k] = array2[j]; - j++; - k++; - } - } - - // 若第一段序列还没扫描完,将其全部复制到合并序列 - while (i <= mid) { - array2[k] = array2[i]; - i++; - k++; - } - - // 若第二段序列还没扫描完,将其全部复制到合并序列 - while (j <= high) { - array2[k] = array2[j]; - j++; - k++; - } - - // 将合并序列复制到原始序列中 - for (k = 0, i = low; i <= high; i++, k++) { - array2[i] = array2[k]; - } -} -``` - -掌握了合并的方法,接下来,让我们来了解**如何分解**。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/merge-sort.png!zp) - -在某趟归并中,设各子表的长度为 **gap**,则归并前 R[0...n-1] 中共有 **n/gap** 个有序的子表:`R[0...gap-1]`, `R[gap...2*gap-1]`, ... , `R[(n/gap)*gap ... n-1]`。 - -调用 Merge **将相邻的子表归并**时,必须对表的特殊情况进行特殊处理。 - -若子表个数为奇数,则最后一个子表无须和其他子表归并(即本趟处理轮空):若子表个数为偶数,则要注意到最后一对子表中后一个子表区间的上限为 n-1。 - -**核心代码** - -```java -public void MergePass(int[] array2, int gap, int length) { - int i = 0; - - // 归并gap长度的两个相邻子表 - for (i = 0; i + 2 * gap - 1 < length; i = i + 2 * gap) { - Merge(array2, i, i + gap - 1, i + 2 * gap - 1); - } - - // 余下两个子表,后者长度小于gap - if (i + gap - 1 < length) { - Merge(array2, i, i + gap - 1, length - 1); - } -} - -public int[] sort(int[] list) { - for (int gap = 1; gap < list.length; gap = 2 * gap) { - MergePass(list, gap, list.length); - System.out.print("gap = " + gap + ":\t"); - this.printAll(list); - } - return list; -} -``` - -### 算法分析 - -**归并排序算法的性能** - -| 参数 | 结果 | -| ------------------ | --------- | -| 排序类别 | 归并排序 | -| 排序方法 | 归并排序 | -| 时间复杂度平均情况 | O(nlog2n) | -| 时间复杂度最坏情况 | O(nlog2n) | -| 时间复杂度最好情况 | O(nlog2n) | -| 空间复杂度 | O(n) | -| 稳定性 | 稳定 | -| 复杂性 | 较复杂 | - -#### 时间复杂度 - -归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是 **O(n\*log2n)**。 - -#### 空间复杂度 - -由前面的算法说明可知,算法处理过程中,需要一个大小为 **n** 的临时存储空间用以保存合并序列。 - -#### 算法稳定性 - -在归并排序中,相等的元素的顺序不会改变,所以它是**稳定的**算法。 - -#### 归并排序和堆排序、快速排序的比较 - -若从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。 - -若从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。 - -若从平均情况下的排序速度考虑,应该选择快速排序。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。 - -## 基数排序 - -### 要点 - -基数排序与本系列前面讲解的七种排序方法都不同,它**不需要比较关键字的大小**。 - -它是根据关键字中各位的值,通过对排序的 N 个元素进行若干趟“分配”与“收集”来实现排序的。 - -不妨通过一个具体的实例来展示一下,基数排序是如何进行的。 - -设有一个初始序列为: R {50, 123, 543, 187, 49, 30,0, 2, 11, 100}。 - -我们知道,任何一个阿拉伯数,它的各个位数上的基数都是以 0\~9 来表示的。 - -所以我们不妨把 0\~9 视为 10 个桶。 - -我们先根据序列的个位数的数字来进行分类,将其分到指定的桶中。例如:R[0] = 50,个位数上是 0,将这个数存入编号为 0 的桶中。 - -![img](http://dunwu.test.upcdn.net/cs/algorithm/sort/radix-sort.png!zp) - -分类后,我们在从各个桶中,将这些数按照从编号 0 到编号 9 的顺序依次将所有数取出来。 - -这时,得到的序列就是个位数上呈递增趋势的序列。 - -按照个位数排序: {50, 30, 0, 100, 11, 2, 123,543, 187, 49}。 - -接下来,可以对十位数、百位数也按照这种方法进行排序,最后就能得到排序完成的序列。 - -### 算法分析 - -**基数排序的性能** - -| 参数 | 结果 | -| ------------------ | --------- | -| 排序类别 | 基数排序 | -| 排序方法 | 基数排序 | -| 时间复杂度平均情况 | O(d(n+r)) | -| 时间复杂度最坏情况 | O(d(n+r)) | -| 时间复杂度最好情况 | O(d(n+r)) | -| 空间复杂度 | O(n+r) | -| 稳定性 | 稳定 | -| 复杂性 | 较复杂 | - -#### 时间复杂度 - -通过上文可知,假设在基数排序中,r 为基数,d 为位数。则基数排序的时间复杂度为 **O(d(n+r))**。 - -我们可以看出,基数排序的效率和初始序列是否有序没有关联。 - -#### 空间复杂度 - -在基数排序过程中,对于任何位数上的基数进行“装桶”操作时,都需要 **n+r** 个临时空间。 - -#### 算法稳定性 - -在基数排序过程中,每次都是将当前位数上相同数值的元素统一“装桶”,并不需要交换位置。所以基数排序是**稳定**的算法。 - -### 示例代码 - -[我的 Github 测试例](https://github.com/dunwu/algorithm-tutorial/blob/master/codes/algorithm/src/test/java/io/github/dunwu/algorithm/sort/SortStrategyTest.java) - -样本包含:数组个数为奇数、偶数的情况;元素重复或不重复的情况。且样本均为随机样本,实测有效。