开发者

Java中的升序和降序问题

开发者 https://www.devze.com 2022-11-29 12:58 出处:网络 作者: 剑小麟
目录Java升序和降序1.使用Arrays中的升序API(sort)进行升序2.使用comparator接口设置升序和降序升序和降序排序方法及原理Java升序和降序1.使用Arrays中的升序API(...
目录
  • Java升序和降序
    • 1.使用Arrays中的升序API(sort)进行升序
    • 2.使用comparator接口设置升序和降序
  • 升序和降序排序方法及原理

    Java升序和降序

    1.使用Arrays中的升序API(sort)进行升序

    代码示例如下:

    public class px {
        public static void main(String[] args) {
            int[] a={11,55,99,66,22,88,33};
            System.out.println(Arrays.toString(a));//打印原有数组
            Arrays.sort(a);
            System.out.println(Arrays.toString(a));//打印排序后的数组
        }
    }

    2.使用comparator接口设置升序和降序

    comparator接口只能使用引用元素进行排序,在该接口比较器中,当进行升序排序时,如果认为左边数据大于右边数据则返回正整数,右边大于左边返回负整TpZMiyf数,相等返回0,这样就能进行一个完整的升序排序操作。降序排序则反之,左>右为返回负整数,以此类推。

    代码示例如下,以升序为js例:

    pack编程age paixu;
     
    import java.util.Ar开发者_Python培训rays;
    import java.util.Comparator;
    public class px {
        public static void main(String[] args) {
            int[] a={11,55,99,66,22,88,33};
            System.out.println(Arrays.toString(a));
            Arrays.sort(a);
            System.out.println(Arrays.toString(a));
            Integer[] b={666,1,777,33,999,55,33};//引用类型的数组
            Arrays.sort(b,new Comparator<Integer>() {  //comparator接口
                @Override
                public int compare(Integer t, Integer t1) {
                    if (t > t1) {        //升序排序操作
                        return 1;
                    } else if (t < t1) {
                        return -1;
                    }
                    return 0;
            }
        });
            System.out.println(Arrays.toString(b));
        }
    }

    运行结果如下:

    Java中的升序和降序问题

    而我们的comparator还有一种简便方法来进行排序操作,即无需在该接口中进行if语句的判断,而是将两个值直接相减,以此来判断正负值。

    代码示例如下,以降序为例:

    package paixu;
     
    import java.util.Arrays;
    import java.util.Comparator;
    public class px {
        public static void main(String[] args) {
    //        int[] a={11,55,99,66,22,88,33};
    //        System.out.println(Arrays.toString(a));
    //        Arrays.sort(a);
    //        System.out.println(Arrays.toString(a));
            Integer[] b={666,1,777,33,999,55,33};
            Arrays.sort(b,new Comparator<Integer>() {
                @Override
                public int compare(Integer t, Integer t1) {
     
                    return t1-t;
            }
        });
            System.out.println(Arrays.toString(b));
        }
    }

    运行结果如下:

    Java中的升序和降序问题

    升序和降序排序方法及原理

    排序的思路是,冒泡排序是每一次取一个数与其它数进行比较,如果你的数比另一个数大,两个进行位置交换,依次类推。

    public class DemoMessage {
        public static void main(String[] arg) {
            int sortArr[] = new int[]{2, 1, 9, 0, 4, 5, 3, 7, 6, 8};
            sortArr(sortArr);
            //排序升序
            sort(sortArr);
            print(sortArr);
            //排序转置
            reverse(sortArr);
            print(sortArr);
        }
    
        public static void sortArr(int arr[]) {
            System.out.println("原始数组:");
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i] + "\t");
            }
        }
    
        //升序排序
        public static void sort(int arr[]) {
            //外层控制总体的排序次数
            for (int i = 0; i < arr.length; i++) {
                //内层控制的排序次数
                for (int x = 0; x < arr.length - 1; x++) {
                    if (arr[x] > arr[x + 1]) {
                        int t = arr[x];
                        arr[x] = arr[x + 1];
                        arr[x + 1] = t;
                    }
                }
            }
            System.out.println();
        }
    
        public static void print(int temp[]) {
            System.out.println("排序数组:");
            for (int i = 0; i < temp.length; i++) {
                System.out.print(temp[i] + "\t");
            }
        }
    
        //转置排序
        public static void reverse(int arr[]) {
            System.out.println("排序转置:");
            //利用算法,在一个数组上完成所有的转置操作
            //原始数据:   1、2、3、4、5、6、7、8
            //第一次转置:8、2、3、4、5、6、7、1
            //第二次转置:8、7、3、4、5、6、2、1
            //第三次转置:8、7、6、4、5、3、2、1
            //第四次转置:8、7、6、5、4、3、2、1
            //转换次数:数组的长度除以2,它的长度是一个偶数
            //那么问题来了,如果是一个奇数,
            //这就是问题,也就是说不管是一个偶数还是一个奇数,转轩换的次数完全是一样的,所以不影响
            int len = arr.length / 2;//转换次娄
    js        int head = 0;//开始索引
            int tail = arr.length - 1;//尾部索引
            for (int x编程客栈 = 0; x < len; x++) {
                int temp = arr[head];
                arr[head] = arr[tail];
                arr[tail] = temp;
                head++;
                tail--;
            }
        }
    }

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号