数据结构与算法
月光下的平方
求知若饥,虚心若愚。
展开
-
java提高篇之LinkedList的实现
本篇的目的主要是自己去实现双向链表以能够更好的理解LinkedList。首先定义一个Node类package com.wonglar.linkedlist;public class Node { //前一个结点 private Node previous; //结点中的对象 private Object obj; //后一个结点 private Nod原创 2017-05-12 11:34:45 · 352 阅读 · 0 评论 -
java提高篇之ArrayList的实现
我们知道在java集合框架中有一个支持有序并且可以重复的List接口,而在此接口下有支持随机访问效率较高的ArrayList,底层是链表实现的LinkedList,和底层实现也是数组的Vector,今天我们就来看一个ArrayList的实现。 ArrayList的源码实现,或许大家也都或多或少的去看过,或者研究过。知道底层的实现依赖的是数组,初始长度是10。今天我们就仿照jdk中ArrayL原创 2017-05-10 23:49:42 · 372 阅读 · 0 评论 -
排序算法之插入排序
插入排序,顾名思义,就是把当前待排序的元素插入到一个已经排好序的列表里。犹如我们玩扑克牌的时候,将刚抽取的牌放入我们已经排好序的一滩中。基本思想 把n个待排序的元素看成一个有序列表和一个无序列表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中,每次从无序表中取出第一个元素,将其与有序表中张元素进行比较,将它插入到有序表中适当的位置。排序过程以数组{47,50,38,79原创 2017-06-11 21:11:13 · 405 阅读 · 0 评论 -
排序算法之冒泡排序及其优化
定义:每一趟都是相邻两个元素进行比较,将小数放在前面,大数放在后面,最终一趟走完,最大的数也就跑到最后面了。冒泡排序是常见的一种排序方法,比较简单,容易理解,多用于教学(>﹏<)最坏情况下时间复杂度:O(N^2) 。 比较次数是n(n-1)/2。注意两者是不同的概念,为了便于理解,我再啰嗦几句。 对于最坏的情况下,是将顺序的数据变成逆序,或者将逆序的数据变成顺序,这样的情况每次的比较都要进行交换原创 2017-06-10 20:21:32 · 378 阅读 · 0 评论 -
排序算法之选择排序
定义:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。(摘自百度百科)原理:假设给定数组int arr = {数据有n个}。第一趟从ar原创 2017-06-11 17:00:30 · 320 阅读 · 0 评论