算法和数据结构
hands0304
(需要重复写的东西,就没有写的必要了)
展开
-
还记得冒泡排序,插入排序,选择排序吗?
1. 冒泡排序 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。 // 冒泡排序,a表示数组,n表示数组大小 public void bubbleSort(int[] a, int n) { if (n <= 1) return; for (int i = 0; i < n; ++i) { // 提前退出冒泡循环原创 2020-10-15 15:45:31 · 96 阅读 · 0 评论 -
递归走台阶
假如这里有 n 个台阶,每次你可以跨 1 个台阶或者 2 个台阶,请问走这 n 个台阶有多少种走法? 分析问题 n = 1 时有一种走法 n = 2 时有两种走法 f(n) = f(n-1)+f(n-2)种走法 上编码: public int taij(int n){ if (n == 1) { return 1; } if (n == 2) { return 2; } re.原创 2020-10-14 09:36:55 · 378 阅读 · 0 评论 -
约瑟夫问题
什么是约瑟夫问题 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后, 39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到, 于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀, 然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从。 首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。 接着,再越过k-1个人,并杀掉第k个人。这个过原创 2020-10-09 16:54:21 · 252 阅读 · 0 评论 -
基于数组实现的循环队列
队列,先进先出。 队列,有顺序队列(数组实现),和链式队列(链表实现)。 由于顺序队列在队列放满后,需要移位,就是将队头到队尾之间的数据平移,使队头指向数组下标0的位置。 如果不想平移,那么就试试循环队列吧(基于数组实现的循环队列)。 如下代码: public class CircularQueue { // 数组items,数组大小n private String[] items; private int n; // 队头下标 private int he.原创 2020-10-13 17:03:30 · 282 阅读 · 0 评论