Java SE第四课:数组相关代码—冒泡排序,求平均值,旋转数组,偶数在右奇数在左

1.冒泡排序

import java.util.Arrays;
public class Test0921 {
    //把输出函数封装到一个函数里,打印时直接调用
    public static void testBubbleSort(int[] a){
        System.out.println("排序前:");
        System.out.println(Arrays.toString(a));
        bubbleSort(a);
        bubbleSort1(a);
        System.out.println("排序后:");
        System.out.println(Arrays.toString(a));
    }
    //冒泡排序
    public static void swap(int[] a,int i,int j){
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    //第一种方法:无序[0,a.length-i);有序[a.length-i,a.length)
    public static void bubbleSort(int[] a){
        for(int i=0;i<a.length;i++){
            boolean sorted=true;
            //冒泡过程
            for(int j=1;j<a.length-i;j++){
                if(a[j-1]>a[j]){
                    swap(a,j-1,j);
                    sorted=false;
                }
            }
            if(sorted==true){
                return;
            }
        }
    }
    //第二种方法:无序[i,a.length);有序[0,i)
    public static void bubbleSort1(int[] a){
        for(int i=0;i<a.length;i++){
            for(int j=a.length-1;j>i;j--){
                if(a[j]<a[j-1]){
                    swap(a,j,j-1);
                }
            }
        }
    }
    public static void main(String[] args){
        int[] a={1,2,3,4,5,6,7};
        int[] b={7,6,5,4,3,2,1};
        int[] c={3,5,2,4,1,7,6};
        int[] d={3,3,3,3,3,3,3};
        testBubbleSort(a);
        testBubbleSort(b);
        testBubbleSort(c);
        testBubbleSort(d);
    }
}

在这里插入图片描述
2.去掉一个最大值和一个最小值求平均数

public class Test0921 {
    //去掉一个最大值和一个最小值求平均数
    public static double average(int[] a){
        int sum=0;
        int max=Integer.MIN_VALUE;
        int min=Integer.MAX_VALUE;
        for(int v:a){
            sum+=v;
            if(v>max){
                max=v;
            }
            if(v<min){
                min=v;
            }
        }
        return (double)(sum-max-min)/(a.length-2);
    }
    public static void main(String[] args){
        int[] a={7,6,5,4,3,2,1};
        System.out.println(average(a));
    }
}

在这里插入图片描述
3.旋转数组

import java.util.Arrays;
public class Test0921 {
    public static int[] rotate(int[] a,int k){
        k=k%a.length;  //若旋转的数超过数组长度,则取余,因为旋转数组长度个数还是原来的数组
        int[] rightPart=Arrays.copyOfRange(a,a.length-k,a.length);
        System.out.println(Arrays.toString(rightPart));
        System.arraycopy(a,0,a,k,a.length-k);
        System.out.println(Arrays.toString(a));
        System.arraycopy(rightPart,0,a,0,k);
        return a;
    }
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5, 6, 7};
        System.out.println(Arrays.toString(rotate(a, 3)));
        System.out.println(Arrays.toString(rotate(a, 14)));
    }
}

在这里插入图片描述
4.将数组里偶数放在右边,奇数放在左边

import java.util.Arrays;
public class Test0921 {
    public static void swap(int[] a,int i,int j){
        int t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    //第一种方法
    public static int[] partition(int[] a){
        //begin和end相当于是两个指针
        //[begin,end]区间内的是未判断的数
        //[0,begin)    偶数
        //[end,a.length)   奇数
        int begin=0;
        int end=a.length-1;
        while(begin<end){
            while(begin<end&&a[begin]%2==0){
                begin++;
            }
            while(begin<end&&a[end]%2!=0){
                end--;
            }
            swap(a,begin,end);
            //这里的交换之所以不用a[begin],a[end],而是begin,end是因为调用的是swap函数,swap函数的形参是下标,第二个方法同理
        }
        return a;
    }
    //第二种方法
    public static int[] partition1(int[] a){
        int d=0;
        for(int i=0;i<a.length;i++) {
            if (a[i] % 2 == 0) {
                swap(a, i, d);
                d++;
            }
        }
        return a;
    }
    public static void main(String[] args){
        int[] a={3,6,2,7,4,1,5,9};
        System.out.println(Arrays.toString(partition(a)));
        System.out.println(Arrays.toString(partition1(a)));
    }
}

在这里插入图片描述

发布了61 篇原创文章 · 获赞 3 · 访问量 1229

猜你喜欢

转载自blog.csdn.net/qq_44847147/article/details/101101054
今日推荐