数据结构与算法
VictorLeeLk
我是世界的某个BUG
展开
-
python 愚人排序
python愚人排序中只有一个while循环,根据比较相邻元素的大小,如果左边的元素小于右边的元素,则索引加1,进行下一对相邻元素的比较;如果左边的元素大于右边的元素,则交换两个元素的位置,并且索引减1,一次循环结束。然后在进行下一次循环的比较,直到将序列中所有的元素都进行了排序,循环结束。侏儒排序的运行时间是 之间,分别表示最好的情况和最坏的情况。代码如下:def gnomesort原创 2016-09-29 15:08:01 · 480 阅读 · 0 评论 -
[java]归并排序
package sort_book_datastruction;import java.util.Arrays;public class MergeSort { /** * 归并排序 * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列 * 时间复杂度为O(原创 2017-08-27 13:55:15 · 306 阅读 · 0 评论 -
[java]二叉树构建、遍历、深度、平衡性
package tree;/** * 2017-3-15 * 剑指offer-P55 * @author victorlee * */public class ConstructTree{ public Tree construct(int[] pre,int[] in){ if(pre.length ==0 || in.length == 0)原创 2017-08-27 19:27:32 · 433 阅读 · 0 评论 -
内部排序分类及稳定性
内部排序分类及稳定性插入排序 直接插入希尔排序选择排序 简单选择堆排序交换排序 冒泡排序快速排序归并排序基数排序稳定性:待排序记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,则称为稳定排序。稳定排序有: 冒泡排序,插入排序,归并排序,基数排序( 冒插归基\color {red} {冒插归基})不稳定排序: 选择排序,快速排序,希尔排序,堆排序原创 2017-08-26 15:29:53 · 1333 阅读 · 0 评论 -
[JAVA]数组旋转输出
注意元素开始输出的位置;总共有输出多少轮:n/2+1每一轮分为上、右、下、左。求每一个方向起始位置与坐标的关系。import java.util.ArrayList;import java.util.Scanner;/* * 旋转输出矩阵,从中心元素开始,矩阵n*n,n为奇数。 */public class rotateOrder { public ArrayList<I原创 2017-09-22 22:05:02 · 1639 阅读 · 1 评论 -
十一、从头到尾解析Hash表算法
十一、从头到尾解析Hash 表算法作者:July、wuliming、pkuoliver 出处:http://blog.csdn.net/v_JULY_v。 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。----------------------------转载 2017-08-29 14:26:04 · 377 阅读 · 0 评论 -
[java] 二叉树的后序遍历(递归与非递归实现)
后序遍历递归定义: 先左子树,后右子树,再根节点。后序遍历的难点在于:需要判断上次访问的节点是位于左子树,还是右子树。若是位于左子树,则需跳过根节点,先进入右子树,再回头访问根节点;若是位于右子树,则直接访问根节点。直接看代码,代码中有详细的注释。 public void behindOrder(Tree n){ if(n!= null){ behindOr原创 2017-08-29 15:16:51 · 3923 阅读 · 0 评论 -
[JAVA]堆排序
package sort_book_datastruction;import java.util.Arrays;/** * 这是一个建立最大顶堆的过程,根节点值最大, 与最后一个元素进行交换之后, * 然后对剩下的元素进行筛选,即调整堆。 * 两步:1.建堆;2。帅选 * @author Administrator * */public class HeapSort { /*原创 2017-09-23 15:00:43 · 362 阅读 · 0 评论 -
[JAVA]快速排序
package sort_book_datastruction;import java.util.ArrayList;import java.util.Arrays;/** * 快速排序: * 基本思想:通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字比另一部分记录的关键字小, * 则可以分别对两部分记录继续进行排序,以达到整个序列有序; * 每一趟能原创 2017-09-23 15:01:18 · 423 阅读 · 0 评论 -
动态规划-最少硬币组合问题
import java.util.Scanner;/* * 假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少? */public class GetLeastNum { public int getLeastNum(int[] array,int n){ int lens=array.length;原创 2017-09-19 11:20:34 · 2657 阅读 · 0 评论 -
[java]选择排序
//选择排序(08/26),个人写 public void selectsort(int[] array){ if(array==null||array.length==0) return; for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length原创 2017-08-26 22:54:05 · 341 阅读 · 0 评论 -
[java]冒泡排序的常规、改进以及递归实现
package sort_book_datastruction;import java.util.Arrays;/** * 冒泡排序; * @author Administrator * */public class BubbleSort { public void bubbleSort(int[] array){ for(int i = 1;i<array.le原创 2017-08-26 20:04:54 · 1103 阅读 · 0 评论 -
python 插入排序
插入排序主要的思想是插入第i个元素到前i-1个已经排好序的序列中,将第i个元素与第i-1个元素相比较,如果大于等于,则将第i个元素放在后面。如果第i个元素小于第i-1的元素,则互换二者的位置,再比较待插入元素与第i-2个元素的大小,直到将待插入元素放到合适的位置。代码如下:def insertsort(seq): len1 = len(seq) for i in range原创 2016-09-29 16:11:43 · 450 阅读 · 0 评论 -
梯度下降算法
一、优化算法概述 优化算法所要求解的是一个问题的最优解或者近似最优解。现实生活中有很多的最优化问题,如最短路径问题,如组合优化问题等等,同样,也存在很多求解这些优化问题的方法和思路,如梯度下降方法。 机器学习在近年来得到了迅速的发展,越来越多的机器学习算法被提出,同样越来越多的问题利用机器学习算法得到解决。优化算法是机器学习算法中使用到的一种求解方法。在机器学习,我们需要寻转载 2016-11-28 11:53:30 · 678 阅读 · 0 评论 -
数组与链表的区别
在面试或者相关的概念中,经常会被问到数组和链表之间的区别,今天自己做一个小结,与大家分享。首先,数组是同类型的连续的一个存储空间,链表是不连续的,其元素结点是一个结构体。数组是在栈中分配的,即数组大小在编译时就已经确定,即内存是静态分配的;链表是在堆中分配的,运行过程才具体分配,即链表是动态分配内存。数组对于元素的查询是通过下标直接索引,而链表是通过结点之间的链接一步一步进行遍历。原创 2017-03-17 16:33:24 · 660 阅读 · 0 评论 -
Java单链表的操作
本文实现的是JAVA的单链表操作,主要包括插入、删除头结点,在指定位置插入节点,根据位置或者节点的数据删除节点。节点的定义如下:package com.tyxh.link; //节点类 public class Node { protected Node next; //指针域 protected int data;//数据域原创 2017-03-12 20:35:47 · 654 阅读 · 0 评论 -
Java重建二叉树
输入前序和中序二叉树遍历的结果,重建出该二叉树。直接上代码,可以参考代码中的相关注释。首先定义树的结点结构,如下:package tree;public class Tree { public int val; public Tree left_child; public Tree right_child; public Tree(int val){原创 2017-03-15 16:37:05 · 823 阅读 · 0 评论 -
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键转载 2017-04-12 15:13:32 · 498 阅读 · 0 评论 -
排序算法之直接插入
基本思想将一个记录插入到已排序的有序表中,从而得到一个新的记录数据增1的有序表n-1趟插入:先将序列中的第一个记录看成一个有序的子序列,然后从第二个记录逐个插入,直到整个序列编程按关键字非递减有序序列为止。具体步骤例如第i个元素是待排序的元素,则前i-1个元素是已经非递减排列的序列,将第i个元素插入到前面已经排好的序列中,该元素从第i-1个元素进行比较,如果大于第i-1个元素,则直接插入;原创 2017-04-12 16:11:27 · 403 阅读 · 0 评论 -
java 希尔排序
package sort_book_datastruction;import java.util.Arrays;/** * 2017/4/1 * 希尔排序:是插入排序的一种,又称为缩小增量的插入排序或者分段排序 * 基本思想:将整个待排序序列分割成若干个待排序子序列; * 对这些子序列分别进行排序,不断缩小增量,构成子序列,再排序; * 当整个序列基本有序时,再对原创 2017-08-26 16:27:39 · 346 阅读 · 0 评论 -
[java]插入排序及折半插入排序
package sort_book_datastruction;import java.util.Arrays;/** * 插入排序:主要是将待排序的元素插入到已经排好序的列表中,从而编程长度加1的有序表; * 具体步骤:例如第i个元素是待排序的元素,则前i-1个元素是已经非递减排列的序列,将第i个元素插入到前面已经排好的序列中, * 该元素从第i-1个元素进行比较,如果大于第i-1个元素,原创 2017-08-26 16:34:32 · 322 阅读 · 0 评论 -
动态规划-硬币组合数目
import java.util.Scanner;/* * 硬币的类型有1角,2角,5角,给定一个数额n,多少种组合方式 *///暴力解法public class CashNum { public int getNum(int n){ int count=0; for(int i=0;i<=n;i++) for(int j=0原创 2017-09-19 12:36:54 · 1899 阅读 · 0 评论