Data structures and algorithms
C-A-L-D
双手代码,失去年华!
展开
-
数据结构和算法(三)线性表——链表
链表由若干个“节点”组成,每个节点含有数据域和指针域有一个指针域,就是单向链表;两个指针域,可以组成双向链表链表有链头和链尾,链头数据域必须为null,链尾指针域必须为null单链表:链表插入和删除只需要修改指节点对应的针域指针指向即可!单链表API设计:package cn.itcast.algorithm.linear;import java.util.Iterator;public class LinkList<T> imple...原创 2020-08-26 02:34:59 · 1365 阅读 · 0 评论 -
数据结构和算法(三)线性表——顺序表
术语原创 2020-08-25 00:24:21 · 322 阅读 · 0 评论 -
数据结构和算法(二)算法高级排序——排序算法稳定性
稳定性的定义: 数组arr中有若干元素,其中A元素和B元素相等,并且A元素在B元素前面,如果使用某种排序算法排序后,能够保 证A元素依然在B元素的前面,可以说这个该算法是稳定的。常见排序算法的稳定性: 冒泡排序: 只有当arr[i]>arr[i+1]的时候,才会交换元素的位置,而相等的时候并不交换位置,所以冒泡排序是一种稳定排序 算法。 选择排序: 选择排序是给每个位置选择当前元素最小的,例如有数据{5(1),8 ,5(2), 2, 9 },第一遍选择到的最小元.原创 2020-08-24 20:38:45 · 218 阅读 · 0 评论 -
数据结构和算法(二)算法高级排序——快速
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。排序原理: 1.首先设定一个分界值,通过该分界值将数组分成左右两部分; 2.将大于或等于分界值的数据放到到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于 或等于分界值,而右边部分中各元素都大于或等于分界值..原创 2020-08-23 22:12:43 · 212 阅读 · 0 评论 -
数据结构和算法(二)算法高级排序——归并
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子 序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序 表,称为二路归并。排序原理: 1.拆分(分):尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是 1为止。 2.合并(治):将相邻的两个子组进行合并成一个有序的大组; 3.不断的重复步骤2,直到最终只有一个组为止。 ..原创 2020-08-22 23:27:23 · 169 阅读 · 0 评论 -
数据结构和算法(二)算法高级排序——希尔
前面介绍的三种简单排序适合少数量级数据排序,但遇到大数量级特别慢,为了对大数量级数据排序,采用更复杂的排序方式!希尔排序是插入排序的升级版,先按大增长量预排序几组数据,最后按增长量为1排全部数据!比如,增长量为4的插入排序增长量为2增长量为1增长量的计算方式: int h = 1;// 先确定初始增长量h while (h < arr.length / 2) { h = 2 * h + 1..原创 2020-08-21 23:46:45 · 178 阅读 · 0 评论 -
数据结构和算法(二)算法排序——插入
插入排序有两部分,排序部分和未排序部分。外层迭代将第i个元素插入到正确位置,内层迭代以冒泡的方式将第i个元素逐渐往前挪动到正确位置!基本实现: Integer[] arr = {5,8,6,3,9,2,1,7}; for (int i = 1; i < arr.length; i++) {// 内循环倒序比较——j下标值和j-1下标值冒泡比较,直到插入到正确位置 for (int j = i; j &g...原创 2020-08-21 11:46:28 · 162 阅读 · 0 评论 -
数据结构和算法(二)算法排序——选择
选择排序也是两层迭代,通过外层迭代确定几轮“大筛选”,通过内层迭代第一个元素跟后面所有元素比较,选择确定最小值,放在最前面,依次往后推!基本实现: Integer[] arr = {5,8,6,3,9,2,1,7}; for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { if..原创 2020-08-21 11:00:46 · 132 阅读 · 0 评论 -
数据结构和算法(二)算法排序——冒泡
所谓“冒泡”,就是通过迭代比较元素大小,将大值元素通过内层迭代像冒泡一样逐渐交换到最后!外层迭代确定通过几轮“大筛选”内层迭代确定将大致逐渐向后挪package com.jun.sort;import java.util.Arrays;public class BubbleSort { public static void main(String[] args) { Integer[] arr = {5,8,6,3,9,2,1,7}; fo.原创 2020-08-21 10:29:28 · 198 阅读 · 0 评论 -
数据结构和算法(二)算法排序——Comparable排序接口
Comparable接口有唯一的抽象方法,用于比较两个元素的大小!package com.jun.sort;/** * 通过实现Comparable接口方法,比较两个元素大小(类似一些基本包装类和String都有了默认实现) */public class ComparableImplement implements Comparable { private String a = "你好"; @Override public int compareTo(Object原创 2020-08-21 09:51:29 · 280 阅读 · 0 评论 -
数据结构和算法(一)——概念
数据结构组织和存储数据分为:逻辑结构(集合,线性,树,图)物理结构(顺序存储结构,链式存储结构)算法解题方案的准确而完整的描述研究算法的好坏,一般从两个角度:时间复杂度O (O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3))空间复杂度O (实际结果都是8的整数倍(不够会自动补全) 对象引用占8个byte,创建对象需要16个b...原创 2020-08-21 09:17:28 · 265 阅读 · 0 评论