升序: 
    选择排序:
        选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置
        先出现最小值,最后出现最大值。
 public static void main(String[] args) {
int[] arr = {5,8,9,12,55,565,421,12,2512,-5,-56};
sortMethod(arr);
p(arr);
}
//排序核心代码
private static void sortMethod(int arr[]) {
for(int i = 0 ;i<arr.length - 1;i++){
for(int j = i + 1;j<arr.length;j++){
if(arr[i] > arr[j]){
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
} //打印数组元素
static void p(int[] arr) {
String ret = "[";
for(int i = 0;i<arr.length;i++){
ret += arr[i];
if(i == arr.length - 1){
ret += "]";
}else{
ret += ",";
}
}
System.out.println("---------->"+ret);

  

 冒泡排序:
        相邻两个元素依次相比较
        先出现最大值,最后出现最小值。
public static void main(String[] args) {
int arr[] = {6,9,4589,442,458,5232,-788,7,545,-44,55,-11};
sortMethod(arr);
p(arr);
}
private static void p(int[] arr) {
String ret = "[";
for(int i = 0; i < arr.length; i ++){
ret += arr[i];
if( i == arr.length - 1){
ret += "]";
}else{
ret += ",";
}
}
System.out.println("---------->" + ret);
}
private static void sortMethod(int[] arr) {
for(int j = 1;j<arr.length;j++){
for(int i = 0; i <arr.length - j;i++){
if(arr[i] > arr[i + 1]){
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
二分查找法:
    先对代码进行排序,再取中间值,再拿指定值跟中间值进行比较,如果小于中间值,查找范围就变成最小的索引值到中间值索引减1,如果指定值大于中间值,则查找范围变成中间值索引加1到最大的索引值。
优点:缩小查找范围,提高性能
 //查找指定数组指定元素的索引值。
public static void main(String[] args) {
int[] arr = {5,4,231,45,75,45,11,-11,-21,-45};
int key = 45;
sortMethod(arr);
printSort(arr);
int index = binarySeach(arr,key,0,arr.length - 1);
System.out.println("----------->所求索引值:"+index);
}
//二分查找法核心代码
private static int binarySeach(int[] arr, int key,int fromIndex,int toInedx) {
//最小索引与最大索引
//fromIndex 表示从哪个位置开始查找,toIndex表示到那个位置结束
int minIndex = fromIndex,maxIndex = toInedx;
while(maxIndex >= minIndex){
//中间索引
int midIndex = (maxIndex + minIndex)/2;
//中间索引的值
int midIndexVal = arr[midIndex];
if(key > midIndexVal){
minIndex = midIndex + 1;
}else if(key < midIndexVal){
maxIndex = midIndex - 1;
}else{
return midIndex;
}
}
return -1;
}
//打印排序后的代码
private static void printSort(int[] arr) {
String ret = "[";
for(int i = 0;i<arr.length;i++){
ret +=arr[i];
if(i == arr.length - 1){
ret += "]";
}else{
ret += ",";
}
}
System.out.println("----------->排序:" + ret);
}
//对代码进行排序
private static void sortMethod(int[] arr) {
for(int j = 0;j<arr.length - 1;j++){
for(int i = 0;i<arr.length - j - 1;i++){
if(arr[i] > arr[i + 1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}

数组的拷贝:

     /**
*
* @author Essence
*arraycopy(Object src, int srcPos, Object dest,int destPos, int length)
*该方法接收四个参数
*object src :原数组,即被拷贝的数组
*int srcPos: 原数组的目标位置 即从哪个位置开始拷贝起
*Object dest:目标数组 即用来存储被拷贝的数组
*int destPos:目标数组中的起始位置,即向目标数组中插入数据的起始位置
*int length:要复制的元素数量
*/
public static void main(String[] args) {
String[] arr = {"A","B","C","D"};
String[] arr1 = new String[5];
System.out.println(Arrays.toString(arr1)); // 拷贝之前 : [null, null, null, null, null]
System.arraycopy(arr, 1, arr1,2, 3);
System.out.println(Arrays.toString(arr1)); //拷贝之后: [null, null, B, C, D] }

可变参数:

 /**
* Java5 出现的新特性 参数可变
* 可变参数必须作为参数的最后一个参数 ,参数可以直接传递0到n个
*其本质上就是数组
* method(int ... arr)
* @author Essence
*
*/
public static void main(String[] args) {
int[] arr = {1,2,347,7,78,9};
System.out.println(getSum(arr));
/**
* 可变参数调用特点:
* getSum(1,2,34,5)
*/
System.out.println(getSum(1,2,34,5)); }
private static int getSum(int ... arr) {
int sum = 0;
for(int i = 0;i<arr.length;i++){
sum += arr[i];
}
return sum;
}
}
可变参数可以当做一位数组来调用:getSum(new int[] {1,2,3,4,5});
也可以直接写参数,个数任意,但是类型必须一致:getSum(1,2,34,5)
递归:

    基本思想:自己调用自己
    结构:
        递归头:定义递归结束的时候,什么时候不调用自身方法。如果没有定义头,将会陷入死循环
        递归体:什么时候需要调用自身方法
利用递归解决阶乘问题:
   public class Demo{
public static void main(String[] args) {
long sum = factorial(10);
System.out.println(sum);
}
static long factorial(int n){
if(n==1){
return 1;
}else{
return n*factorial(n-1);
}
}
}

Java编程思想上的两个题斐波那契数列与吸血鬼数字

斐波那契数列:  

/*
* 1,1,2,3,5,8,13,21,34
* 起那两个数是第三个数的和
* 斐波那契数列
* F(n) = F(n-1)+F(n-2)
*/
方法一:
private static void fibonacci(int n) {
int arr[] = new int[n],sum = 0;
arr[0] = arr[1] = 1;
for(int i = 2;i<arr.length;i++){
arr[i] = arr[i - 1] + arr[i-2];
System.out.println("arr["+i+"] "+arr[i]);
sum += arr[i];
}
System.out.println("斐波那契数列之和:" +sum);
}
方法二:
private static int sumFibonacci(int n) {
if(n<1){
return 1;
}else{
return sumFibonacci(n - 1) + sumFibonacci(n - 2);
}
}
private static void getFibonacci(int n) {
for(int i = 0;i <= n;i++){
int f = sumFibonacci(i);
System.out.print(f + "\t");
if(i%3 == 0){
System.out.println();
}
}
}
方法三:
private static void fibbonacci1(int n){
int a = 1,b = 1,c = 0 , sum = 0;
System.out.println(a+"\t"+b+"\t");
for(int i = 1;i<=n;i++){
c =a +b;
a = b;
b = c;
sum += c;
System.out.print(c+"\t");
if(i%3==0){
System.out.println();
}
}
System.out.println("斐波那契数列之和:" +sum);
}

吸血鬼数字:

/*
*1260=21*60
*1827=21*87
*2187=27*81
*/
1 private static void vampireNumber1() {
for(int i = 1;i<100;i++){
for(int j = 1;j<100;j++){
if(i*j>1000){
String a = i+""+j;
String b = i*j+"";
if(equals(a,b)){
System.out.println(i+"\t"+j+"\t"+i*j);
}
}
}
}
}
private static boolean equals(String a, String b) {
// TODO Auto-generated method stub
char[] aArrays ,bArrays;
aArrays = a.toCharArray();
bArrays = b.toCharArray();
Arrays.sort(aArrays);
Arrays.sort(bArrays);
if(Arrays.equals(aArrays,bArrays)){
return true;
}
return false;
}

数组排序、递归——(Java学习笔记二)的更多相关文章

  1. Java学习笔记二十九:一个Java面向对象的小练习

    一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...

  2. Java学习笔记二:数据类型II

    GitHub代码练习地址:https://github.com/Neo-ML/JavaPractice/blob/master/Intpractice3.java 一  Java中的数据类型 Java ...

  3. Java学习笔记二十八:Java中的接口

    Java中的接口 一:Java的接口: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承 ...

  4. Java学习笔记二十七:Java中的抽象类

    Java中的抽象类 一:Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  5. Java学习笔记二十五:Java面向对象的三大特性之多态

    Java面向对象的三大特性之多态 一:什么是多态: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作. 多态性是对象多种表现形式的体现. 现实中,比 ...

  6. Java学习笔记二十四:Java中的Object类

    Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...

  7. Java学习笔记二十二:Java的方法重写

    Java的方法重写 一:什么是方法的重写: 如果子类对继承父类的方法不满意,是可以重写父类继承的方法的,当调用方法时会优先调用子类的方法. 语法规则 返回值类型.方法名.参数类型及个数都要与父类继承的 ...

  8. Java学习笔记二十一:Java面向对象的三大特性之继承

    Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...

  9. Java学习笔记二十:Java中的内部类

    Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...

随机推荐

  1. 【SICP读书笔记(四)】练习2.27 --- 表序列reverse的扩展:树结构的deep-reverse

    题目要求是,修改练习2.18所做的reverse过程,得到一个deep-reverse过程.它以一个表为参数,返回另一个表作为值,结果表中的元素反转过来,其中的子树也反转. 例如: (define x ...

  2. Android_使用StrictMode 调试开发

    本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/40076049 1.StrictMode简单介绍 自Android 2 ...

  3. [JSP][JSTL]页面调用函数--它${fn:}内置函数、是推断字符串是空的、更换车厢

    页面中调用函数--之${fn:}内置函数 函数描写叙述 fn:contains(string, substring) 假设參数string中包括參数substring,返回true fn:contai ...

  4. 【ThinkingInC++】53、构造函数,析构函数,全局变量

    /** * 图书:[ThinkingInC++] * 特征:构造函数,析构函数,全局变量 * 时刻:2014年9一个月17日本18:07:43 * 笔者:cutter_point */ #includ ...

  5. 基于ICSharpCode.SharpZipLib.Zip的压缩解压缩

    原文:基于ICSharpCode.SharpZipLib.Zip的压缩解压缩 今天记压缩解压缩的使用,是基于开源项目ICSharpCode.SharpZipLib.Zip的使用. 一.压缩: /// ...

  6. Android更改checkbox的style

    resouce文件夹下,value文件夹下,styles.xml文件中新增样式: <resources> <style name="radioButton"> ...

  7. Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.ClassVisitor

    1.错误描写叙述 信息: Setting autowire strategy to name 2014-7-13 1:37:43 org.apache.struts2.spring.StrutsSpr ...

  8. windows下一个erlang包装镜像启动

    于linux环境,erlang经systools:make_script("",[])和systools:make_tar()命令生成图像包,安装镜像包,图片包的安装过程,通过替换 ...

  9. 编译命令行终端 swift

    So, this is where swift lives, after you've installed XCode 6 Beta: /Applications/Xcode6-Beta.app/Co ...

  10. JAVA经BigDecimal圆角的解决方案及注意事项

    /** * @Description: 四舍五入住宿2小数位数 * @param valueName * @return */ public static Double formateDouble45 ...