
算法
一只小白杰
这个作者很懒,什么都没留下…
展开
-
归并排序
归并排序就是利用归并思想,将两个有序的数列合并在一起,成为一个新的有序数列。例如 【7 5 9 2 6 3 4 1 】这个数列,利用递归思想,我们可以将它分成左右两个部分,【7 5 9 2】和【6 3 4 1】,然后接着左右两部分再继续拆分【7 5】、【9 2】、【6 3】、【4 1】直到左右不可再拆分时为止,(【7】、【5】)、(【9】、【2】)、(【6】、【3】)、(【4】、【1】)然后依次将...原创 2018-10-01 11:24:25 · 230 阅读 · 0 评论 -
升级版快速排序算法
前面给大家讲过了经典快速排序算法,今天给大家介绍的是升级版的快速排序算法。具体的算法思想如下:将数列递归划分成最小区和最大区,然后中间放置的是相等数,然后利用递归思想不断划package alrithmetic;import java.util.Arrays;public class QuickSort { public static void main(String[] arg...原创 2018-10-04 13:44:01 · 850 阅读 · 0 评论 -
堆排序
堆排序的思想是:首先将一个数列构造成一个大根堆,所谓大根堆就是一棵完全二叉树,数的父节点都要比子节点大。将一个数列生成一个大根堆之后,我们就可以确定这个数列的最大数位于根顶,然后,我们每次都将根顶的最大元素与根底的元素交换位置,这样一来,此时就不是大根堆了,所以接着我们要调整堆的元素排列顺序,使其重新变成大根堆,再继续将根顶元素与根底元素交换位置,再调整成大根堆,直到堆中元素全部调整完毕为止。...原创 2018-10-04 20:58:39 · 242 阅读 · 0 评论 -
选择排序算法
选择排序算法类似于冒泡排序,选择排序算法每次都从数列中选举出一个最小值,然后,在剩下的数列中继续寻找第二个最小值,依次不断重复寻找最小值,以使数列达到有序排列,相比于冒泡排序,选择排序并不用每次都交换前后两个数的位置,减少了开销,选择排序是通过比较值大小,然后记录最小值所在的下标,最后再来交换数值,这样就减少了交换次数。package alrithmetic;import java.ut...原创 2018-10-04 23:23:32 · 236 阅读 · 0 评论 -
双向链表的实现
相比于数组,链表的查询效率较低,但是增删效率较高,双向链表具有头尾两个节点,每个节点均有三部分组成,前驱指针用来指向前一个节点,后驱指针用来指向后一个节点,另一部分则用来存在数据。与数组一样,访问链表依靠的是下标,根据下标来定位到我们所要访问的节点,向链表中添加一个节点时,要先判断这个链表的头节点是否为空,如果链表的头结点为空,那么我们当前新添加进去的节点则成为头结点,也成为尾节点,有了尾结点之后...原创 2018-10-15 16:05:03 · 2441 阅读 · 0 评论 -
冒泡排序
冒泡排序是大一上c语言的时候所学的,也是接触到现在最简单最容易的一种排序算法。基本原理:假设有n个数,则要比较n-1次,每一次比较,都从第一个数开始依次和后面的数做比较,每一轮都将最大的数放在最后面。每一轮只要比较到第 (n-轮 )个数为止。在这里我加入了对数器的概念,所谓对数器就是用来做测试用的,可以测试你的排序函数是否是正确的,类似于做算法题的oj平台。话不多说,详情请看下方代码。...原创 2018-09-30 11:17:37 · 193 阅读 · 0 评论 -
插入排序
插入排序算法原理:类似于我们打扑克时,在手里安排牌的顺序一样,总是从后往前一直对比着来插牌,插入排序也是这样的,假设有n个数,那么我们设定一个下标i,让i的值等于下标1;然后再给定一个下标j,让j的值等于i-1,这样一来,j的值就指向了i的前一个数,而i则指向我们的当前数,然后让下标为j的数与当前数做比较,如果下标为j的数比当前数大,则下标为j的数与下当前数交换位置,这样我们的i所指向的当前数就往...原创 2018-09-30 15:38:03 · 179 阅读 · 0 评论 -
递归求数组中的最大值
第一次听闻递归这个概念是在大一上c语言的时候,那时候用递归来求n的阶乘。没想到后面才知道原来递归这么重要,递归是一种宏观上的设计,千万不要去扣细节。递归用于归并算法、快速排序算法等。接下来,我们先看一个用递归来实现求数组最大值的例子。我们的递归思路是这样的,把一个数组拆分成两个部分,左部分和右部分,然后分别对每个部分求最大值,最后两个部分进行比较,接着,我们将每个部分继续拆分成两个部分,一直拆...原创 2018-09-30 16:54:26 · 6512 阅读 · 0 评论