数据结构与算法
在下木子李
喜欢Android开发的程序员
展开
-
Java 单链表的实现与反转
package test;import java.util.Iterator;public class LinkList<T> implements Iterable<T>{ // 头节点 private Node head; // 记录链表长度 private int N; public LinkList(){ // 初始化头节点 head = new Node(null, null); N = 0; } // 清空链表 public v原创 2021-10-28 20:22:20 · 275 阅读 · 0 评论 -
Java排序算法:快速排序
Java快速排序原理:在待排序数组中选定一个分界值(取第一个),基于分界值将数组切分成两部分。将数组中大于分界值的元素全部放到右边,小于分界值的元素全部放到左边,这样左边所有的元素都小于右边的元素。对左右两边的元素进行排序,一样的,在左边的部分中选取一个分界值(取第一个),基于该分界值继续将左边部分的所有元素切分成两部分。第一次切分得到的右边部分同样进行切分操作。递归执行以上的操作直到不需要切分为止,经过以上的操作,最后的数组就是排好序的了。切分的具体实现逻辑:1、找一个分界值(取第一个),用两原创 2021-06-03 22:25:40 · 136 阅读 · 0 评论 -
Java 排序算法:希尔排序 详细解析
Java希尔排序原理:希尔排序是插入排序的改进版本。希尔排序将数组数据进行分组。如何分组?首先,确定一个增长量h,基于增长量对数据进行分组。例如,当增长量h = 3时,数组中下标为0、3、6、9… 的元素为一组,下标为1、4、7、10… 的元素为一组,依此类推。然后对每一组都进行插入排序。这样就算是完成了一趟排序,之后对增长量h进行减少(规则是 h = h/2 ),然后继续基于当前的增长量h进行分组,分完组继续进行插入排序。重复以上的操作直到增长量小于1就停止,排序完成。最开始的增长量h如何确原创 2021-06-02 18:10:33 · 524 阅读 · 0 评论 -
Java排序算法: 插入排序
java 插入排序排序原理:将待排序数组分成已排序部分和未排序部分,将未排序部分的第一个值插入到已排序部分中。倒序遍历已排序部分并与待插入的值进行比较,若大于待插入的值,则进行位置交换,直到碰见小于待插入的值就停止遍历。图片来源黑马程序员代码实现:插入排序类:package com.example.algorithmdemo.sortingAlgorithm;/** * 插入排序 */public class Insertion { //排序方法 public stat原创 2021-06-01 11:19:45 · 107 阅读 · 1 评论 -
Java排序算法:选择排序
选择排序选择排序就是在每一次遍历过程中将数组中值最小的排到当前的第一位。总共需要(数组长度-1)次遍历,在每次遍历中假定第一位索引的值为最小值,然后与下一个值对比,如果最小索引所在值大于其他值就将小的那一个索引当作最小值索引,接着继续对比最小索引所在值与下一个索引的值,重复此操作,最终就会在此次遍历中得到最小值及其索引,将最小值与第一位的值进行交换,这样就将最小值放到了数组开头,完成本次遍历。选择排序的时间复杂度为O(N^2)图片来源黑马教程代码实现:package com.example.a原创 2021-04-26 09:43:44 · 156 阅读 · 0 评论 -
java排序算法:冒泡排序
冒泡排序冒泡排序是排序算法的一种,就像它的名字一样,排序的方式就是数组中的元素通过比较,大的元素一级一级的往后冒,原理比较容易理解,但代码实现就没那么简单。我们需要先搞清楚要怎么比较,需要比较多少次。首先,通过分析可以知道每个元素都与相邻元素比较一次,如果前一个元素比后一个元素大就交换位置,这样一趟下来数组还没有完全排序,只是把数组中最大的值排到了最后面。所以我们需要多趟比较才能将整个数组排序。那比较的趟数是 多少呢,其实我们按这个排序方法先模拟一下就知道,比较趟数都是(数组长度-1)。然后由于每一趟原创 2021-04-23 11:28:44 · 115 阅读 · 0 评论 -
队列的顺序表示,java数组模拟循环队列
1、队列简介队列是一个有序列表,遵循“先入先出”的原则,即先存入队列的数据要先取出,后存入的数据后取出。队列有两种存储表示,顺序表示和链式表示。顺序表示可以用数组来实现。2、数组模拟队列用数组模拟队列时,设两个值front=0,rear=0。front表示队列首部第一个数据所在位置,rear表示尾部最后一个数据的下一个位置。将数据插入数组队列时(入队),从尾部进行插入,即array[rear] = value,同时rear后移,rear++。取出数据时(出队),从头部取出数据,value = ar原创 2020-10-21 22:06:09 · 147 阅读 · 0 评论 -
(数据结构)稀疏数组sparseArray
简介:稀疏数组是用于优化,压缩具有以下特点的二维数组:当二维数组中的元素大部分相同,有意义的数据元素较少时,可以使用稀疏数组进行简化,节省存储空间。简单应用:例如:保存/读取五子棋棋盘数据时,将棋盘看成是一个二维数组,记录黑白子所在位置的行数与列数。当棋盘上黑白子较少时,二维数组中有效数据就比较少,这样的二维数组浪费存储空间且遍历时间较长。这时,可以使用稀疏数组进行压缩优化。规律: 稀疏数组的第1行第1列记录原数组的行数,第二列记录原数组的列数,第三列记录有效数据的个数。列数固定为3。从第二行开原创 2020-10-19 12:37:21 · 263 阅读 · 0 评论