java:Topic About(猴子吃桃,快速排序,选择排序,插入排序)
1. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
Method 1: 递归解决
public static int peach(int day){
int x=;
if(day==){
x=;
}else{
x=*(peach(day-)+);
/* (昨天-1)的桃子=((今天-1)的桃子+1)*2s
大昨天的桃子=(昨天的桃子+1)*2
*/
}
return x;
}
public static void main(String[] args) {
int x=peach();
System.out.println(x);
}
Method 2:循环解决
public static void main(String[] args) {
int[] peach = new int[];
peach[] = ;
for (int i = ; i >= ; i--) {
peach[i] = (peach[i + ] + ) * ;
//前一天摘的桃=(剩下的桃+1)*2
}
System.out.println("猴子第一天摘:" + peach[]);
}

2.快速排序:

package zzsxt.cn;
public class Test2 {
/**
*
* @description:
* @param a
* @param low
* @param high
*
* 快速排序的原理:选择一个关键值作为基准值。
* 比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。
* 一般选择序列的第一个元素。
*
* 一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,
* 如果没有继续比较下一个,
* 直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,
* 交换位置,如果没有继续比较下一个
* ,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,
* 结束第一次循环,此时,对于基准值来说,
* 左右两边就是有序的了。
*
* 接着分别比较左右两边的序列,重复上述的循环。
*
*/
public static void sort(int[] a, int low, int high) {
int start = low;
int end = high;
int key = a[low];
while (end > start) {
// 从后往前比较
while (end > start && a[end] >= key){ // 如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
end--;
}
if (a[end] <= key) {
int temp = a[end];
a[end] = a[start];
a[start] = temp;
}
// 从前往后比较
while (end > start && a[start] <= key){// 如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
start++;
}
if (a[start] >= key) {
int temp = a[start];
a[start] = a[end];
a[end] = temp;
}
// 此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
}
// 递归
if (start > low)//
sort(a, low, start - 1);// 左边序列。第一个索引位置到关键值索引-1
if (end < high)//arr.length-1
sort(a, end + 1, high);// 右边序列。从关键值索引+1到最后一个
}
public static void main(String[] args) {
int[] a = { 12, 20, 5, 16, 15, 1, 30, 45, 23, 9 };
int start = 0;
int end = a.length - 1;
sort(a, start, end);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
3.选择排序:
public class TestSelectSort {
public static void sort(int arr[]) {
int temp = 0;
for (int i = 0; i < arr.length - 1; i++) {
// 认为目前的数就是最小的, 记录最小数的下标
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
// 修改最小值的下标
minIndex = j;
}
}
// 当退出for就找到这次的最小值
if (i != minIndex) {
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
}
4.插入排序:
public class TestInsertSort {
public static void sort(int arr[]) {
int i, j;
for (i = 1; i < arr.length; i++) {
int temp = arr[i];
for (j = i; j > 0 && temp < arr[j - 1]; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
}
java:Topic About(猴子吃桃,快速排序,选择排序,插入排序)的更多相关文章
- 用Java编程计算猴子吃桃问题
猴子吃桃问题:猴子吃桃子问题:猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又吃了一个.第二天又将剩下的桃子吃掉一半,又多吃了一个.以后每天都吃前一天剩下的一半零一个.到第10天在想吃的时候就剩 ...
- java语言描述 猴子吃桃问题(递归和循环写法)
//题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个//第二天早上又将剩下的桃子吃掉一半,又多吃了一个//以后每天早上都吃了前一天剩下 的一半零一个.到第10天早上想再 ...
- 猴子吃桃问题(Java递归实现)
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,见只剩下 ...
- JAVA 基础编程练习题17 【程序 17 猴子吃桃问题】
17 [程序 17 猴子吃桃问题] 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又 将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一 ...
- Java练习小题_猴子吃桃问题分别用for循环和while循环实现程序。
要求说明: 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时, ...
- C#之猴子吃桃儿问题的解法——猴子吐桃儿
猴子第一天摘了许多个桃子,先吃了所有桃子的一半,后又吃了一个:第二天又吃了剩下桃子的一半,后又吃了一个……第十天,剩1个桃子.问:猴子第一天摘了多少个桃子? 首先对“猴子吃桃”的过程进行正向推导,设: ...
- 猴子吃桃问题(南阳ACM324)
猴子吃桃问题 时间限制:3000 ms | 内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此, ...
- ocrosoft 程序设计提高期末复习问题M 递归求猴子吃桃
http://acm.ocrosoft.com/problem.php?cid=1172&pid=12 题目描述 猴子吃桃问题.猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个. ...
- C语言中猴子吃桃问题
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个.第二天早上又将第一天剩下的桃子吃掉一半,有多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第 10 天早上想再吃时 ...
随机推荐
- struts配置访问后缀为.do,.action,.*
Struts 配置文件的加载顺序 Struts-default.xml---> struts-plugin.xml--> struts.xml--> struts.propert ...
- 数组转list
例如String数组转成Integer泛型的List String [] pathArr = deptPath.split(","); Lit<Integer> dep ...
- 把自己的web项目发布到网页上
一.首先,登录自己的bce百度云,bce.baidu.com,建立一个自己的网站 点击左边的应用引擎BAE 点击BAE基础版的部署列表,刚开始是没有的,要添加部署 其中的选项只需要写域名(应用名称会和 ...
- 01-01 Web应用
一 Web应用的组成 接下来我们学习的目的是为了开发一个Web应用程序,而Web应用程序是基于B/S架构的,其中B指的是浏览器,负责向S端发送请求信息,而S端会根据接收到的请求信息返回相应的数据给浏览 ...
- JAVA笔记8-对象转型casting
1.规则 (1)基类(父类)的引用类型变量可以指向其子类对象:(向上转型) (2)基类的引用不可以访问其子类对象新增加的成员(属性和方法): (3)可以使用“引用变量 instanceof 类名”来判 ...
- libkmcuda安装
编译安装 1,前期准备 git clone https://github.com/src-d/kmcuda cd kmcuda/src/ 例如: cmake -DCMAKE_BUILD_TYPE=Re ...
- js文件夹上传
文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹. ...
- Vue-CLI项目搭建
一.环境搭建 1.安装服务器node 官网下载 https://nodejs.org/zh-cn/ node:用C++语言编写,用来运行JavaScript语言 node可以为前端项目提供server ...
- ZOJ3649 Social Net
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3649 这题倍增维护信息之多,也能算是一道毒瘤题了-- 解题思路 ...
- python学习之路(13)
列表生成式 列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, ...