升序: 
    选择排序:
        选定一个元素,一次和后面的元素相比较,如果选定的元素大雨后面的比较元素,就交换位置
        先出现最小值,最后出现最大值。
 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. Sliverlight实例之 使用 ControlTemplate 自定义按钮的外观

    按钮,最终效果,如下图: 见Project21_ButtonSkin 1, 创建Sliverlight项目 说明: generic.xaml:样式和模板就被定义在这个文件里 MyButton.cs:控 ...

  2. APK 代码混淆

    # To enable ProGuard in your project, edit project.properties # to define the proguard.config proper ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

  4. J Dp

    <span style="color:#000099;">/* ____________________________________________________ ...

  5. 九度OJ 1177 查找 (模拟)

    题目1177:查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5659 解决:1667 题目描写叙述: 读入一组字符串(待操作的),再读入一个int n记录记下来有几条命令,总共同拥有 ...

  6. 【转】d3d的投影矩阵推导

    原帖地址:http://blog.csdn.net/popy007/article/details/4091967 上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL所使用的透视投影矩阵的生 ...

  7. [LeetCode179]Largest Number

    题目: Given a list of non negative integers, arrange them such that they form the largest number. For ...

  8. Android访问设置

    在需求 AndroidManifest.xml 中增加下面代码: (1)假设应用程序须要訪问网络权限 <uses-permission android:name="android.pe ...

  9. HDU 1085-Holding Bin-Laden Captive!(生成功能)

    Holding Bin-Laden Captive! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Ja ...

  10. Vertica: 基于DBMS架构的列存储数据仓库

    介绍 Vertica(属于HP公司),是一个基于DBMS架构的数据库系统,适合读密集的分析型数据库应用,比方数据仓库,白皮书中全名称为VerticaAnalytic Database.从命名中也可以看 ...