基本算法
Christlxl
快乐工作,认真生活。
展开
-
汉诺塔
//理解汉诺塔,关键:递归,f(n)=2f(n-1)+1;import java.util.*;import java.io.*;/*算法:当只有一个盘子的时候,只需要从将A塔上的一个盘子移到C塔上。 当A塔上有两个盘子是,先将A塔上的1号盘子(编号从上到下)移动到B塔上,再将A塔上的2号盘子移动的C塔上,最后将B塔上的小盘子移动到C塔上。 当转载 2016-07-25 19:43:47 · 336 阅读 · 0 评论 -
鸽巢(计数)排序--java
//鸽巢排序,去zte面试被问到一道算法题,后来才知道是鸽巢排序的思想,可用于统计数组中重复元素的个数//调试时总是报数组越界异常,max=32,new数组的长度必须大于32,应为max+1; 菜鸟涨经验啊!import java.util.*;import java.io.*;public class PeigonSort{//核心void sort(int[原创 2016-07-07 21:20:58 · 816 阅读 · 0 评论 -
快速排序——java
//快排思想:一趟排完后将基准值(一般为第一个值)放到中间,左边比他小,右边都比他大,即二分。然后分别对左右两块数据再进行快排,依次递归;一趟排序过程如下图所示:(http://blog.csdn.net/pzhtpf/article/details/7560294)import java.util.*;import java.io.*;public class Qui转载 2016-07-06 23:00:58 · 349 阅读 · 0 评论 -
归并排序——java
//利用递归,实现序列的二分,再排序,合并,排序合并同时进行//合并时需要定义一个同样长度的空数组,用于存放排好序的序列//主要是实现合并函数import java.util.*;import java.io.*;public class GuiBingSort{void merge(int[] a, int first,int last,int cente转载 2016-07-06 22:58:39 · 222 阅读 · 0 评论 -
选择排序与插入排序--java
//选择排序与插入排序(选择排序是固定位置,找元素。插入排序固定元素找位置)//选择排序:从数组中找到最小的放到第一个位置,然后再在剩余元素中找最小的放第二个位置,依次类推//关键:两层循环,在第一层循环中保存最小元素,在第二层循环中找到最小元素(位置)//双重循环,事件复杂度平均O(N*N),空间复杂度1import java.util.*;import java.io.*;原创 2016-07-08 20:50:09 · 369 阅读 · 0 评论 -
堆排序--java
//堆排序其实也是一种选择排序,是一种树形选择排序。//只不过直接选择排序中,为了从R[1...n]中选择最大记录,需比较n-1次,然后从R[1...n-2]中选择最大记录需比较n-2次。//事实上这n-2次比较中有很多已经在前面的n-1次比较中已经做过,而树形选择排序恰好利用树形的特点保存了部分前面的比较结果,//因此可以减少比较次数。对于n个关键字序列,最坏情况下每个节点需比较lo转载 2016-07-12 14:17:28 · 287 阅读 · 0 评论 -
冒泡排序——java
11原创 2016-07-06 12:42:47 · 292 阅读 · 0 评论 -
二分查找
二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即5,由于5 2.寻找{6, 7, 8,转载 2016-09-21 09:29:14 · 429 阅读 · 0 评论