排序方法-循环和数组练习

时间:2022-12-30 11:39:44

1.冒泡排序:

package com.zs.PaiXu;

public class MaoPao {
    public static void main(String[] args) {
        int[] arr={5,4,3,6,8,7,2,9,1};
        PaiXu(arr);
        PrintArray(arr);
    }

    public static void PrintArray(int[] arr) {
        // 遍历输出数组
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");    
        }
        System.out.println();
    }

    private static void PaiXu(int[] arr) {
        /* 冒泡排序法,数组相邻元素之间比较,如果当前元素比下一个元素大,那么两个元素换位置,这样内部循环第一次循环完时,
        排出来数组最大值在数组的最后一个位置,然后下一次循环比较出剩余元素中最大的数,排在倒数第二个元素下标上,依次右到左排,
        具体排列方法见下图*/
        for (int i = 0; i < arr.length-1; i++) {//for循环来多次比较,每次比较排出一个最大值
            for (int j = 0; j < arr.length-i-1; j++) {//内部循环比较出最大值
                if (arr[j]>arr[j+1]) {
                    int  temp= arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }    
            }
            PrintArray(arr);//外部循环一次,就输出一次当前排序结果
        }
    }
}

运行结果如下:

排序方法-循环和数组练习

2.选择排序法:

package com.zs.PaiXu;

public class XuanZe {
    public static void main(String[] args) {
        int[] arr={4,2,6,8,7,5,9,1,3};
        PaiXu(arr);
        MaoPao.PrintArray(arr);//调用冒泡排序类的输出数组方法,
        
    }
    private static void PaiXu(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 max=arr[j];
                    arr[j]=arr[i];
                    arr[i]=max;
                }
            }
            MaoPao.PrintArray(arr);//调用冒泡排序输出方法,查看每一次外循环结束时,当前数组的排序;
        }
    }
}

运行结果:

排序方法-循环和数组练习

3.数组元素逆序

package com.zs.PaiXu;


public class NiXu {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,4,5,6,7,8,9};
        NiXuArray(arr);    
    }
    private static void NiXuArray(int[] arr) {
        /* 定义两个变量,min表示第一个数字,max表示最后一个数字,然后min++,同时max--,当min>max时,循环结束*/
        for (int min = 0,max=arr.length-1; min < max; min++,max--) {
            int temp=arr[min];//定义一个变量,将第一个数字赋给变量,
            arr[min]=arr[max];//将最后一个数字赋给第一个元素,
            arr[max]=temp;    //将第一个数字的值赋到最后一个数字的位置。通过第一个与最后一个元素互换位置,实现逆序
            MaoPao.PrintArray(arr);//调用输出数组方法
        }
    }
}

运行结果如下:

排序方法-循环和数组练习

4.水仙花数:

package com.zs.PaiXu;

public class ShuiXianHua {
    /*水仙花数是一个三位数,这个数的值等于个位的立方+十位的立方+百位的立方*/
    public static void main(String[] args) {
        for (int i = 100; i <=999; i++) {
            int x=i/100%10;
            int y=i/10%10;
            int z=i%10;
            if(i==x*x*x+y*y*y+z*z*z){
                System.out.println(i);
            }    
        }
    }
}

5.倒着打印99乘法表

package com.zs.windows;

public class ChengFaBiao {
    public static void main(String[] args) {
        for (int i = 9; i >=1; i--) {
            for (int j = i; j>=1; j--) {
                System.out.print(i+"*"+j+"="+i*j+"\t");
            }
            System.out.println();
            for(int j=0;j<=(9-i);j++){
                System.out.print("     \t");
            }
        }
    }
}

运行结果:

排序方法-循环和数组练习