IT算法笔记
算法笔记
DeMonnnnnn
I decide what tide to bring. 我的命运,由我做主。
展开
-
排序算法---最常见的冒泡排序
冒泡排序冒泡排序应该是我们最早接触的算法,没有之一。 冒泡排序的基本思想是:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。 如图,从大到小排序,展示了12这个最小的数字是如何排到最后的: Java代码实现public class BubbleSort { public static void main(String[] args) { System.out原创 2017-08-07 12:03:43 · 515 阅读 · 0 评论 -
Java 实现链表的插入,遍历
PS本文基于节点类中午getter/setter方法的实现,下篇文档介绍有getter/setter的实现。 实现原理基本相同。链表节点类public class ListNode { int val;//数据 ListNode next;//指针 ListNode(int val) { this.val = val; this.next =原创 2017-08-09 14:07:27 · 5502 阅读 · 0 评论 -
算法笔记---全排列算法
题目全排列算法,在笔试中是非常常见的。如:打印出给出的String字符串的全排列,如 abc 的全排列: abc, acb, bca, dac, cab, cba全排列的递归形式算法思想:简单地说:就是第一个位置的字符分别和面的字符进行交换。E.g:E = (a , b , c)则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b)然后a.perm(b,原创 2017-08-31 17:09:28 · 926 阅读 · 0 评论 -
排序算法---最快最简单的桶排序
前言一直做客户端开发,实际上很少用到算法,但是为了即将到来的面试,还是得准备一下的。准备找书开始复习一下算法,先从最简单的排序开始做起吧。 一步一个脚印。学习,记录,积累 = 任务,打怪,升级。 桶排序的思想如果需要对数据范围在0~n的整数进行排序,我们需要n+1个桶,来记录0~n之间 每一个数字出现的次数,我们将桶按照0~n编号,然后将出现的数字放在与编号相等的桶里,并统计每个桶内数字的个数原创 2017-08-07 11:26:14 · 859 阅读 · 0 评论 -
排序算法---ALL的总结
复杂度一句话解释算法插入排序1.直接插入排序:循环每个位置,与前一个的比较,若大则不动;若小,则移动到其前面,继续,直到比前面的一个大。2.希尔排序: 插入排序的升级版本,是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,当增量减至1时,整个数据恰被分成一组,算法终止。选择排序1.直接选择排序:在一个原创 2017-09-04 13:30:57 · 421 阅读 · 0 评论 -
排序算法---归并排序
归并排序归并排序算法可以递归的描述为:算法将数组分为两半,对每部分递归的应用归并排序。在两部分都排好序后,对他们进行归并。 归并排序算法是递归+分治的最好体现之一。 算法的大致流程,如下图:Java代码使用Java代码实现归并特别简单,也很容易理解.public class MergeSort { public static void main(String[] args) {原创 2017-09-04 11:50:05 · 356 阅读 · 0 评论 -
排序算法---堆排序
堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它是不稳定排序。堆排序基本思想及步骤 堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值原创 2017-09-04 10:32:57 · 949 阅读 · 0 评论 -
排序算法---希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个数据恰被分成一组,算法便终止。 代码publ原创 2017-09-04 09:42:17 · 331 阅读 · 0 评论 -
排序算法---最常用的快速排序
前言冒泡排序解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10 亿次,那么对1 亿个数进行排序,桶排序只需要0.1 秒,而冒泡排序则需要1 千万秒,达到115 天之久,是不是很吓人?那有没有既不浪费空间又可以快 一点的排序算法呢?那就是“快速排序”啦!快排思想在数序列中找一个数作为基准数(一般为第一个数),经过比较调整,原创 2017-08-07 14:09:08 · 490 阅读 · 0 评论 -
Java 倒置(翻转)链表的两种实现
节点类public class MyNode { int val;//数据 MyNode next;//指针 MyNode(int val) { this.val = val; this.next = null; } public int getVal() { return val; } public原创 2017-08-09 14:51:40 · 2225 阅读 · 0 评论 -
排序算法---最稳定的计数排序
算法思想有没有一种排序算法的时间复杂度为O(N)呢? 如果面试官这么问你,千万不要直接否定! 事实上是有线性时间复杂度的排序算法,只不过其使用条件有限,只能是满足条件的整数(0~n)序列,而且需要一定的辅助空间。这就是我们即将要提到的——计数排序。 对于排序算法来说计数排序是稳定的,跟桶排序相比其所占用的空间是可控的,跟其他比较排序相比它的速度又是快捷的。 其基本思想:用待排序的数作为计数数原创 2017-08-08 16:52:41 · 2442 阅读 · 0 评论 -
排序算法---冒泡改良的选择排序
选择排序的思想选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择。 在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换……第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选原创 2017-08-07 20:53:54 · 593 阅读 · 0 评论 -
排序算法---直接插入排序
算法思想一群孩子一起站队列,现在需要他们从矮到高排。 老师就说话了:“从第一个开始,如果你比前面的高,你就不动;如果你比前面的矮,你就走到他前面,如此继续,直到你比你前面的高就不动了”。 老师的话就是最直观的插入排序思想。即: 1. 找到插入元素。 2. 把元素插到合适的位置,即比前面的大,比后面的小。直接插入排序 public static void insertSort(int[] ar原创 2017-08-31 18:02:51 · 435 阅读 · 0 评论