不懂算法
kunpengku
这个作者很懒,什么都没留下…
展开
-
求最大公约数-辗转相除法-欧几里德算法
这是一个 Python 写的求最大公约数的算法。a = 12b= 42def find_divisor(a,b): if a < b: tmp = b b=a a=tmp while b!=0: r = a%b a = b b = r return aprint find_d原创 2015-10-23 17:51:38 · 759 阅读 · 0 评论 -
选择排序 Fortran代码
选择排序program main implicit none integer src(9) data src /9,1,8,2,7,3,6,4,5/ write(*,*) src call select_sort(src, size(src)) write(*,*) src endsubroutine select_sort(src原创 2016-04-18 16:55:28 · 3812 阅读 · 0 评论 -
每天一种算法 - 冒泡排序
冒泡排序,绝对是最寂寞的排序算法。 只有当整体已经很有序的时候,才会显示出较高的效率。 思想类似于 选择排序。 第一轮,选出最大的。 第二轮,在剩下的里面选出最大的。 以此类推。但是这种算法,假设每个元素只能看见它附近的元素,只和紧挨的元素进行比较。所以需要移动很多次元素。 而不能一步到位的移动元素。 多做许多废功。#include <iostream>using namespace原创 2016-04-18 19:44:42 · 466 阅读 · 0 评论 -
快速排序 java代码
作为一个程序员 不知道快速排序,不知其可也。快速排序的思路是,大千世界,有那么多人,那么多数。但所有的数,都和某个数去比较。这样就能保证,一半区域都是小于那个数的。 另一半都是大的。 这样就把大数据一份为2了。 再重复用这种方法。最终会遇到某两个数去相比较。每一个小家庭和谐了,那么整个社会就和谐了。多么伟大的思想。造就了这么好的算法。package bigo;public class quick原创 2016-04-14 11:11:43 · 1212 阅读 · 0 评论 -
每天一种算法-插入排序
插入排序的基础是 ,如果只有一个元素,那么它已经是有序的了。 插入排序的过程是: 第一个元素已经是有序的了。 第二个元素插入第一个元素的有序集合。 第三个元素插入前两个元素的有序集合。 以此类推。插入有序集合的好处是 , 原来的集合已经是有序的了,只需要考虑一个新元素的位置就可以了。package bigo;public class insert { static void swa原创 2016-04-19 16:30:46 · 408 阅读 · 0 评论 -
Dijkatra 迪克斯特拉双栈算术表达式求值算法 Java
import java.util.Stack;/** * Created by yywang on 2017/1/14. */public class Evaluate { static double evaluate(String tmp){ Stack<String> ops = new Stack<String>(); Stack<Double> v原创 2017-01-14 16:46:30 · 1032 阅读 · 0 评论 -
栈-后进先出-java
import java.util.Stack;/** * Created by yywang on 2017/1/14. */public class f { public static void main(String[] args) { Stack<Integer> s = new Stack<Integer>(); for (int i = 0; i原创 2017-01-14 16:11:37 · 3612 阅读 · 0 评论 -
最简单的一种栈 固定大小 [数组实现]
/** * Created by yywang on 2017/1/14. */class stack{ private String [] a; private int N; stack(int cap){ a = new String[cap]; } void push(String o){ a[N] = o;原创 2017-01-14 17:02:44 · 699 阅读 · 0 评论 -
下压堆栈 链表实现 Java
堆栈最好用链表实现/** * Created by yywang on 2017/1/16. */public class Stack<Item> { private Node first;//栈顶 private int N;//元素数量 private class Node{ Item item; Node next; }原创 2017-01-16 06:05:01 · 458 阅读 · 0 评论 -
队列 链表实现 Java
/** * Created by yywang on 2017/1/16. */public class Queue <Item>{ private Node first;//队首 private Node last; //队尾 private int N;//元素数量 private class Node{ Item item;原创 2017-01-16 06:31:05 · 341 阅读 · 0 评论 -
最简单的算法- 二分查找
int binary_search(int src[],int len, int key){ int i=0,j=len-1; while(i<=j){ int mid = i + (j-i)/2; if(src[mid] == key) return mid; else if(key < src[mid]){原创 2016-04-27 14:39:47 · 539 阅读 · 0 评论 -
Java小工具
01,计时器,计算,程序的耗时,在进行压测,然后查问题时会用到。比方某个接口的压测时间是12s,这太高了,但要确定是哪部分程序耗时比较长,就需要在这个接口中,打上若干的点,把问题缩小范围,最后定位。Stopwatch类/** * Created by yywang on 2017/1/16. */class Stopwatch{ private final long start;原创 2017-01-16 22:45:42 · 951 阅读 · 1 评论 -
2sum问题和3sum问题
算法 这个书,190页介绍了 这两个问题 。2sum的意思是 在一组数中,找到 两个数的和为零。有多少个这样的组合。 3sum是 找 有多少三个数的组合 ,他们的和为零。常规的for循环,问题的规模分别是 平方级别 和立方级别。使用先排序,然后查找的方式,可以是 对数线性, 和 平方对数级别。 这样就快了一些。这个转变是 ,把求一个组合的问题 ,转化成 已知一个数,找另一个数的问题。 查找就先排原创 2016-02-21 15:53:58 · 1399 阅读 · 0 评论 -
插入排序 和 希尔排序 java
http://mp.weixin.qq.com/s/deUy_VPJ2m6BFbrEZp9DKg 选择排序/** * Created by fupeng on 2017/1/19. */public class insert { static void show(int [] a){ for(int i : a){ System.out.prin原创 2017-01-20 17:57:50 · 299 阅读 · 0 评论 -
冒泡排序 Java
冒泡排序是最没有效率的排序,原因是 短视/** * Created by fupeng on 2017/1/20. */public class bubble { static void show(int [] a){ for(int i : a){ System.out.println(i); } } static原创 2017-01-20 20:30:43 · 460 阅读 · 0 评论 -
每天一种算法--选择排序
选择排序是这样的, 首先,找到最小的一个数,放在第一个位置,然后在剩下的元素中,找到最小的 ,放在第二个位置,再在除过这两个元素的剩下的里面找到最小的,就是第三小。这样依次类推。最后得到的数列,就是从小到大了。package bigo;public class selectsort { private static void selectSort(int []src, int length原创 2016-04-15 11:02:34 · 371 阅读 · 0 评论 -
每天一种算法--快速排序
C++ 代码#include <iostream>using namespace std;void quick_sort(int src[], int left ,int right){ if(left >= right) return; int i=left, j=right; int key = src[left]; while(i!=j)原创 2016-04-14 17:12:09 · 326 阅读 · 0 评论 -
求解素数-埃拉托斯特尼筛法
该算法来自 百度百科 def primes(n): P = [] f = [] for i in range(n+1): if i > 2 and i%2 == 0: f.append(1) else: f.append(0) i = 3 while i*i <= n:原创 2015-10-23 18:51:39 · 903 阅读 · 0 评论 -
快速排序
#include <iostream>using namespace std;void quick_sort(int a[], int left , int right){ if(left >= right) return; int i = left; int j = right; int key = a[left]; while(i!=j)原创 2015-11-12 14:31:40 · 300 阅读 · 0 评论 -
算法
1,最大公约数 2,求质数 3,二分查找 https://github.com/kunpengku/farmer/blob/master/bigo/binary_search.java原创 2016-01-28 14:18:45 · 402 阅读 · 0 评论 -
归并排序
1, 一个元素的序列一定是有序的。 2,对两个有序序列进行排序有一个很快的方法 merge。这儿一个java的版本 ,请参考。package algorithm;public class Merge { static void merge(int [] arr, int left, int mid ,int right){ int [] tmp = new int[arr.le原创 2016-01-28 15:25:48 · 343 阅读 · 0 评论 -
单链表排序
https://leetcode.com/problems/sort-list/ http://www.acmerblog.com/leetcode-sort-list-5982.html归并排序package bigo;class ListNode{ int val; ListNode next; ListNode(int x) { val = x; }}public原创 2016-03-02 17:09:28 · 374 阅读 · 0 评论 -
二叉树遍历 ,前序,中序,后序, 递归版本
Java实现。package bigo;class Node{ int data; Node left; Node right; Node(int x) { data = x;}}public class midOrder { public static void midOrder(Node root){ if (root != null){原创 2016-03-03 10:35:49 · 380 阅读 · 0 评论 -
10000小时
链表翻转 2h小计 2h 共计 2h原创 2016-02-28 15:54:56 · 451 阅读 · 0 评论 -
二叉树前序 非递归
package bigo;import java.util.Stack;class Node{ int data; Node left; Node right; Node(int x) { data = x;}}public class midOrder { public static void iterativePreOrder(Node root){原创 2016-03-03 14:24:52 · 464 阅读 · 0 评论 -
算法 第四版 书中出现的源代码
http://algs4.cs.princeton.edu/code/原创 2016-02-17 13:29:22 · 6899 阅读 · 0 评论 -
链表翻转
使用了两种方法,递归法 和 非递归法取自 http://www.acmerblog.com/reverse-linked-list-5779.html#include <stdio.h>#include <stdlib.h>struct node{ int data; struct node * next;};void push(struct node ** head_re原创 2016-02-28 15:44:31 · 398 阅读 · 0 评论 -
跳跃表-随机化数据结构
Skip list(跳表)是一种可以代替平衡树的数据结构参考 http://www.mathcs.emory.edu/~cheung/Courses/323/Syllabus/Map/skip-list-impl.htmlhttp://www.acmerblog.com/skip-list-impl-java-5773.htmlSkip list的性质(1) 由很多层结构组成,level是通过一定原创 2016-02-29 11:23:49 · 944 阅读 · 0 评论 -
算法
速度极慢的程序和 不正确的程序一样无用但不成熟的优化是所有罪恶之源头在编程领域,第一个常见的错误是 过于关注程序的性能。 在编程领域,第二个常见的错误是 完全忽略了程序的性能。在处理大规模的问题时, 除了寻找更好的算法之外 ,别无选择。高效和优雅是我们一贯的目标大O是一种几法。无穷大渐近 http://baike.baidu.com/view/2141720.htm大O简化了对增长数量级的上限的原创 2016-03-14 08:04:35 · 340 阅读 · 0 评论 -
每天一种算法-归并排序
Java实现package bigo;public class merge { static void merge(int src[], int left,int right,int mid){ int i=left,j=mid; int m=mid+1,n=right; int k=0; int help[] = new in原创 2016-04-26 17:46:33 · 291 阅读 · 0 评论 -
每天一种算法-希尔排序
希尔排序就是 插入排序。是反复只用插入排序的结果。 因为插入排序,只是前后的元素进行比较,当序列很长的时候,效率会很低。 希尔排序假设一个h, 比较间隔为h的元素的大小。让需要移动的元素,每次可以移动尽量多的距离。然后逐步缩小h的取值。最后h会缩小到1。 这时候就完全是插入排序了。Java实现package bigo;public class insert { static void hi原创 2016-04-26 13:46:49 · 363 阅读 · 0 评论 -
选择排序 Java
/** * Created by yywang on 2017/1/18. */public class SelectSort { static void show(Integer [] a){ for(Integer i : a){ System.out.println(i); } } static boolean原创 2017-01-18 23:00:03 · 300 阅读 · 0 评论