![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 67
可持续化发展
勤学如春起之苗,不见其增,日有所长;辍学如磨刀之石,不见其损,日有所亏。
展开
-
快速排序算法(LeetCode版)
快速排序递归框架public static void quickSort(int[] arr) { quickSort(arr, 0, arr.length - 1);}public static void quickSort(int[] arr, int start, int end) { // 将数组分区,并获得中间值的下标 int middle = partition(arr, start, end); // 对左边区域快速排序 quickSort(a..原创 2021-08-06 16:51:05 · 940 阅读 · 0 评论 -
堆排序算法
数组、链表都是一维的数据结构,相对来说比较容易理解,而堆是二维的数据结构,对抽象思维的要求更高。但堆又是数据结构进阶必经的一步。堆:符合以下两个条件之一的完全二叉树:根节点的值 ≥ 子节点的值,这样的堆被称之为最大堆,或大顶堆;根节点的值 ≤ 子节点的值,这样的堆被称之为最小堆,或小顶堆。堆排序过程如下:用数列构建出一个大顶堆,取出堆顶的数字;调整剩余的数字,构建出新的大顶堆,再次取出堆顶的数字;循环往复,完成整个排序。整体的思路就是这么简单,我们需要解决的问题有两个:如何用数原创 2021-08-06 16:23:39 · 371 阅读 · 0 评论 -
希尔排序算法
希尔排序和冒泡、选择、插入等排序算法一样,逐渐被快速排序所淘汰,但作为承上启下的算法,不可否认的是,希尔排序身上始终闪耀着算法之美。希尔排序本质上是对插入排序的一种优化,它利用了插入排序的简单,又克服了插入排序每次只交换相邻两个元素的缺点。它的基本思想是:将待排序数组按照一定的间隔分为多个子数组,每组分别进行插入排序。这里按照间隔分组指的不是取连续的一段数组,而是每跳跃一定间隔取一个值组成一组逐渐缩小间隔进行下一轮排序最后一轮时,取间隔为 11,也就相当于直接使用插入排序。但这时经过前面的「宏观调原创 2021-08-06 16:05:27 · 169 阅读 · 0 评论 -
插入排序算法
插入排序的思想非常简单,生活中有一个很常见的场景:在打扑克牌时,我们一边抓牌一边给扑克牌排序,每次摸一张牌,就将它插入手上已有的牌中合适的位置,逐渐完成整个排序。插入排序有两种写法:交换法:在新数字插入过程中,不断与前面的数字交换,直到找到自己合适的位置。移动法:在新数字插入过程中,与前面的数字不断比较,前面的数字不断向后挪出位置,当新数字找到自己的位置后,插入一次即可。交换法插入排序public static void insertSort(int[] arr) { // 从第二个数原创 2021-08-06 15:55:38 · 107 阅读 · 0 评论 -
选择排序算法
选择排序的思想是:双重循环遍历数组,每经过一轮比较,找到最小元素的下标,将其交换至首位。public static void selectionSort(int[] arr) { int minIndex; for (int i = 0; i < arr.length - 1; i++) { minIndex = i; for (int j = i + 1; j < arr.length; j++) { if (arr[m原创 2021-08-05 21:16:31 · 132 阅读 · 0 评论 -
冒泡排序算法
冒泡排序有三种写法:一边比较一边向后两两交换,将最大值 / 最小值冒泡到最后一位;经过优化的写法:使用一个变量记录当前轮次的比较是否发生过交换,如果没有发生交换表示已经有序,不再继续排序;进一步优化的写法:除了使用变量记录当前轮次是否发生交换外,再使用一个变量记录上次发生交换的位置,下一轮排序时到达上次交换的位置就停止比较。import java.util.*;public class Main { public static void main(String[] args)原创 2021-08-05 08:47:12 · 99 阅读 · 0 评论 -
私人订制之数据结构(排序算法)
私人订制之数据结构(排序算法)二分查找二分查找是一种算法,其输入是一个有序的元素列表(必须有序),如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。原创 2020-10-03 00:15:21 · 162 阅读 · 0 评论 -
私人订制之数据结构(二叉树)
分类二叉树=二叉排序树=二叉搜索树。(1)左小于根(2)根小于右(3)左右子树也是分类二叉树一棵二叉树的结点要么是叶子结点,要么它有两个子结点(如果一个二叉树的层数为K,且结点总数是(2^k) -1,则它就是满二叉树。)若设二叉树的深度为k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边,这就是完全二叉树。平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右原创 2020-10-02 11:35:37 · 223 阅读 · 0 评论 -
私人订制之数据结构(排序算法)
私人订制之数据结构(排序算法)数据结构如果知识点比较重要的话,看三遍不如动手写一遍,标记代码注释,上传云文档。白话经典算法系列之一 冒泡排序的三种实现排序算法系列之直接插入排序插入排序...原创 2020-10-02 10:09:19 · 221 阅读 · 0 评论