冒泡排序 选择排序 递归思想

package com.sj.dncourse;

/**
 * Created by 96178 on 2017/11/28.
 *  单元测试
 */

public class Test {


    /**
     * 冒泡排序(5次以下,建议使用)
     * @param arr
     */
    public void  bubbleSort(int[] arr){
        for(int j=0;j<arr.length;j++) {
            boolean flag=true;
            for (int i = 0; i < arr.length - 1; i++) {
                //相邻元素比较大小,如果前面大于后面,则调换位置
                if (arr[i] > arr[i + 1]) {
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                    flag=false;//调换过位置就设为false,否则说明顺序是正确的,不需要进行接下来的循环,提升性能
                }
            }
            if(flag){
                break;
            }
        }
    }

    /**
     * 选择排序
     * @param arr
     */
    public void selectSort(int[] arr){
        for(int j=0;j<arr.length;j++){
            int temp;
            for(int i=j;i<arr.length-1;i++){
                if(arr[j]>arr[i]){
                    temp=arr[j];
                    arr[j]=arr[i];
                    arr[i]=temp;
                }
            }
        }
    }


    /**
     * 递归思想排序(压栈)
     * @param n
     */
    public void fun(int n){
        if(n<0){
            return;
        }else{
            fun(n-1);
            System.out.print(" "+n);
        }
    }

    /**
     * 递归思想解决斐波那契数列
     *  1  1  2  3  5  8  13  21  34  55  89
     */
    public int FibonacciSequence(int n){
        if(n==1|| n==2){
            return 1;
        }else {
            return FibonacciSequence(n - 1) + FibonacciSequence(n - 2);
        }
    }

    /**
     *  递归思想  汉诺塔游戏思想
     * @param n    盘子的个数
     * @param start   开始的柱子编号
     * @param middle  中间的柱子编号
     * @param end    后面的柱子编号
     */
    public void hanoi(int n,int start,int middle,int end){
        if(n<=1){
            System.out.println("柱子编号"+start+" ----->编号"+end);
        }else{
            hanoi(n-1,start,end,middle);//把第一个上的n-1哥移动中间
            System.out.println("柱子编号"+start+" ----->编号"+end);//把第一个上的一个移到最后
            hanoi(n-1,middle,start,end);//把中间的n-1个一道最后
        }

    }


    @org.junit.Test
    public void main(){
        int[] array1=new int[]{3, 1, 5, 8, 2, 9, 4, 6, 7};
        int[] array2=new int[]{3, 1, 5, 8, 2, 9, 4, 6, 7};
        System.out.println("初始数组: ");
        printArray(array1);
        System.out.println("冒泡排序后: ");
        bubbleSort(array1);
        printArray(array1);
        System.out.println("选择排序后: ");
        selectSort(array2);
        printArray(array2);
        System.out.println("递归思想1: ");
        fun(3);
        System.out.println("递归思想2: 斐波那契 ");
        System.out.print(FibonacciSequence(5));
        System.out.println("递归思想3: 汉诺塔游戏思想 ");
        hanoi(5,1,2,3);
    }

    /**
     * 打印数组
     * @param a
     */
    private void printArray(int[] a){
        for(int i:a){
            System.out.print(" "+i);
        }
        System.out.println();
    }

}

as 单元测试运行的代码结果为:

冒泡排序 选择排序 递归思想

冒泡排序 选择排序 递归思想