冒泡排序算法-java语言

冒泡排序算法-java语言

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ALG {
    //调用函数实现相应需求

    public static void main(String[] args) {

        /* 23,99,56,1,34,55*/

        int[] a = {23, 99, 56, 1, 34, 55};

//        System.out.println("before:"+ Arrays.toString(a));
//        System.out.println("after:"+Arrays.toString(BubbleSort(a)));




//        System.out.println(narcissisticNumber());
//        /**
//         * 打印出100以内的斐波拉契数列*/
//        for(int i=0;;i++){
//            if(Fibonacci(i)<=100){
//                System.out.println(Fibonacci(i));
//            }else {
//                break;
//            }
//
//        }
        //快速排序
//        System.out.println(Arrays.toString(InsertSort(a)));


        QuickSort(a,0,a.length-1);
        System.out.println(Arrays.toString(a));

    }

    /**
     * 冒泡排序
     */

    public static int[] BubbleSort(int[] arrays) {
        for (int i = 0; i < arrays.length - 1; i++) {
            for (int j = 0; j <i; j++) {

                if (arrays[j] > arrays[j + 1]) {

                    int temp = arrays[j];
                    arrays[j] = arrays[j + 1];
                    arrays[j + 1] = temp;
                }
            }
        }
        return arrays;
    }


    /**
     * 打印出所有的 " 仙花数 ",所谓 " 仙花数 “是指 个三位数,其各位数字  和等于该数本身
     */



    public static List narcissisticNumber() {
        List list = new ArrayList();


        for (int i = 100; i < 1000; i++) {
            //个位
            int a = i % 100 % 10;
            //十位
            int b = i % 100 / 10;
            //百位
            int c = i / 100;
            if (a * a * a + b * b * b + c * c * c == i) {
                System.out.println(i);
                list.add(i);
            }
        }
        return list;
    }
    /**
     * 斐波拉契数
     */

    public static int Fibonacci(int i) {


        if (i <= 2) {
            return 1;

        } else {
            return Fibonacci(i - 1) + Fibonacci(i - 2);
        }
    }

    /**
     * 插入排序
     */

    public static int[] InsertSort(int[] arrays) {
        for (int i = 1; i < arrays.length; i++) {
            for (int j = i; j > 0; j--) {
                if (arrays[j] >= arrays[j - 1]) {
                    break;
                } else {
                    int temp = arrays[j];
                    arrays[j] = arrays[j - 1];
                    arrays[j - 1] = temp;
                }
            }
        }
        return arrays;
    }

    /**
     * 快速排序
     */


    public static void QuickSort(int[] array,int start ,int end){
        if(start>=end){
            return ;
        }
        int index=partition(array,start,end);
        QuickSort(array,start,index-1);
        QuickSort(array,index+1,end);
    }


    public static int partition(int []array,int start,int end){
    //固定的切分方式
    int key=array[start];
        while(start<end){
        while(array[end]>=key&&end>start){//从后半部分向前扫描
            end--;
        }
        array[start]=array[end];
        while(array[start]<=key&&end>start){//从前半部分向后扫描
            start++;
        }
        array[end]=array[start];
    }
    array[end]=key;
        return end;
}


}