java实现经典算法

来源:互联网 发布:武汉淘宝美工培训学校 编辑:程序博客网 时间:2024/05/29 17:22

冒泡排序

/***冒泡排序*比较相邻的两个元素,如果第一个比第二个大则将两个交换顺序*i<numbers.length 控制排序轮数 一般为数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了*j<numbers.length-i  因为经过一个排序后,最大(或最小)的元素都已经放到了数组的最后一位,下次不用再进行比较。所以长度改变*/public void bubbleSort(int[] numbers){    for(int i=1;i<numbers.length;i++){        for(int j=0;j<numbers.length-i;j++){            if(numbers[j]>numbers[j+1]){                int temp=numbers[j];                numbers[j]=numbers[j+1];                numbers[j+1]=temp;            }        }    }}

直接选择排序

属于选择排序的一种,排序速度比冒泡排序快,也是最常用的

/*** 由于交换位置放在了第一层循环里面,所以速度会比冒泡(放在了第二层循环中)快*/public void selectSort(int[] array){    //作为最大值(或最小)的下标    int index;    for(int i=1;i<array.length;i++){        //默认第一个最大(或最小)        index=0;        for(int j=1;j<array.length-i;j++){            //取最大值的下标            if(array[j]>array[index]){                index=j;            }        }        //在上面的for循环中找到了最大(最小)值的下标        //交换位置        //一次循环都会将一个最值放到最后,所以长度逐次递减        int temp=array[array.length-i];        array[array.length-i]=array[index];        array[index]=temp;    }}

反转排序

以相反的顺序把原有数组的内容重新排序

/***基本思想:将数组的最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换*/public void ReverseSort(int[] array){    for(int i=0;i<array.length/2;i++){        int temp=array[i];        array[i]=array[array.length-1-i];        array[array.length-1-i]=temp;    }}

费氏数列

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子数量为多少?
分析:兔子的数量规律为:1,1,2,3,5,8,13,21….
当n>=3时,fn=f(n-1)+f(n-2); n为下标

java实现:

public int getCount(int N){    if(N==1||N==2){        return 1;    }else {        return getCount(N-1)+getCount(N-2);    }}

判断素数个数并输出

素数:除了1和它本身以外不再有其他因数
判断N到M直接素数的个数,并输出(N < M)

/*** 两次循环*第一次循环是n到m,取每个数*第二个循环是判断这个数是不是素数*/public void judgePrimeNumber(int N;int M){    int count=0;    for(int i=N;i<=M;i++){        boolean flag=true;        //从2到自身-1,如果有因数,则退出判断        for(int j=2;j<i;j++){            if(i%j==0){                flag=flase;                break;            }        }        //判断这个数是不是素数,如果是则数量加1并打印        if(flag==true){            count+=1;            System.out.print(i+" ");        }    }    System.out.println("从"+N+"到"+M+"有"+count+"个素数");}

打印图形类

菱形:

   *   ***  ************ *****  ***   *

java实现:

/***主要分两部分实现,上三角形和下三角形*上三角形规律:空格数逐层减1,* 逐层加2*下三角规律:空格数加1;* 逐层减3*/public void lingxing(){    //控制上三角的循环    for(int i=1;i<=4;i++){        //打印空白        for(int k=1;k<=4-i;k++){            System.out.print(" ");        }        //打印 *        for(int j=1;j<=2*i-1;j++){            System.out.print("*");        }        //换行        System.out.print();    }    //下三角    for(i=3;i>=1;i--){        for(int k=1;k<= 4-i;k++){            System.out.print(" ");        }        for(int j=1;j<=2*i-1;j++){            System.out.print("*");        }        System.out.println();    }}

打印三角形

****************************

代码是菱形去掉打印空格的部分

原创粉丝点击