代码改变世界

随笔分类 -  算法

波兰表达式

2012-07-30 18:08 by youxin, 2278 阅读, 收藏, 编辑
摘要: 1逆波兰式也叫后缀表达式(postfix)(将运算符写在操作数之后),相应的波兰表达式叫前缀表达式(运算符在操作数之前)。中缀表达式(infix)是我们最常使用的。如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+(a+b)*c-(a+b)/e的后缀表达式为:(a+b)*c-(a+b)... 阅读全文

循环链表范例Josephus问题

2012-07-27 23:12 by youxin, 598 阅读, 收藏, 编辑
摘要: 一群小孩围成一圈,任意假定一个数N,从第一个小孩起,逆时针方向数,每数到第M个小孩时,该小孩就离开,然后再由下一个重新报数,小孩不断离开,圈子不断缩小。最后,剩下的一个小孩便是胜利者。究竟胜利者是第几个小孩呢? 类似这样的问题都叫Josephus(约瑟夫斯)问题。我们可以用一个循环链表表示排成圆圈的人,整数i代表第i个人,先为1号建立一个单节点循环链表,再把2号到N号依次插入到1号节点后面,这样就形成了一个由1--N(逆时针)的员,最后x指向N,然后我们从1号开始跳过M-1个节点,把第M-1个节点的链接改为指向第M+1号节点,一直这样做,直到只剩下一个节点为止。#includeusing n. 阅读全文

归并排序(递归和非递归)和自然合并排序

2012-04-29 17:06 by youxin, 1510 阅读, 收藏, 编辑
摘要: 合并排序是一种分治法,实现上用了递归结构。过程是:先将待排序的元素分为两部分,一般是对等长度的两部分,称为左右L、R,先分别将L,R进行合并排序,然后将排序好的L、R合并在一起,则所有元素都有序。复杂度O(nlgn)。 #include<iostream> using namespace std; 阅读全文

快速排序

2012-04-27 21:54 by youxin, 249 阅读, 收藏, 编辑
摘要: 先看普通版本 #include<stdio.h> int Partition(int A[],int p,int r) { //最后一个r做pivot int tmp; int i=p-1; int j=p; for(j=p;j<=r-1;j++) if(A[j]<=A[r]) { i++; tmp 阅读全文

多种方式求fibonacci数列

2012-04-14 17:14 by youxin, 453 阅读, 收藏, 编辑
摘要: 方法如下:/*f[1]=1;f[2]=1; f[n]=f[n-2]+f[n-1] ;*/#includeusing namespace std;int fibonacci(int n){ int *f=new int[n+1];//第0个元素不放 f[1]=1; f[2]=1; for(int i=3;i>n; cout(3/2)^n-1;递归求解过程如下:第3种:迭代来求/*f[1]=1;f[2]=1; f[n]=f[n-2]+f[n-1] ;*/#includeusing namespace std;int fibonacci(int n){ int *... 阅读全文

基于递归的插入排序

2012-03-09 12:54 by youxin, 3540 阅读, 收藏, 编辑
摘要: 插入排序类似玩扑克牌,每次把抽到的牌插入到已排好序的牌中,使之大小有序。直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,... 阅读全文

二路插入排序详解

2012-02-03 17:20 by youxin, 1903 阅读, 收藏, 编辑
摘要: 二路插入排序设置两个变量first,final,把第一个数当成pivot,比它小则往前插,越小越往前插;比它大就往后插,越大越往后插,源码如下: 1 #include <stdio.h> 2 #define MAXSIZE 100 3 4 typedef int elemtype; 5 6 void BiInsertsort(elemtype buffer[],int length){ 7 elemtype tmp[MAXSIZE+1]; 8 int first,final,med; 9 int i,j;10 ... 阅读全文
点击右上角即可分享
微信分享提示