Java中的升序和降序问题

 更新时间:2022年11月25日 10:54:50   作者:剑小麟  
这篇文章主要介绍了Java中的升序和降序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

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

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>() {  //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));
    }
}

运行结果如下:

而我们的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));
    }
}

运行结果如下:

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

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

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;//转换次娄
        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--;
        }
    }
}

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

相关文章

  • Spring Data Jpa 自动生成表结构的方法示例

    Spring Data Jpa 自动生成表结构的方法示例

    这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • java学习之理解自动拆装箱特性

    java学习之理解自动拆装箱特性

    这篇文章主要介绍java自动拆装箱特性以及java自动拆装箱的应用,有需要的朋友可以借鉴参考下,希望可以有所帮助,祝大家早日升职加薪
    2021-09-09
  • Java socket通信模拟QQ实现多人聊天室

    Java socket通信模拟QQ实现多人聊天室

    Socket在Java实战网络通信编程应用中有非常重要的作用,你想要跟别人联系都得通过socket占据端口来实现,掌握Socket技术不仅在聊天应用程序中需要用到(比如QQ什么的都都是用socket来写的),而且对于学习 Asp.net 也非常有帮助
    2022-07-07
  • Spring 容器初始化 register 与 refresh方法

    Spring 容器初始化 register 与 refresh方法

    这篇文章主要介绍了Spring 容器初始化 register 与 refresh方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Netty分布式ByteBuf的分类方式源码解析

    Netty分布式ByteBuf的分类方式源码解析

    这篇文章主要为大家介绍了Netty分布式ByteBuf的分类方式源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java使用建造者模式实现办理手机套餐功能详解

    Java使用建造者模式实现办理手机套餐功能详解

    这篇文章主要介绍了Java使用建造者模式实现办理手机套餐功能,较为详细的描述了建造者模式的概念、原理并结合实例形式分析了Java使用建造者模式实现的办理手机套餐功能具体步骤与相关操作注意事项,需要的朋友可以参考下
    2018-05-05
  • Spring框架初始化解析

    Spring框架初始化解析

    这篇文章主要介绍了Spring框架初始化解析,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Java easyexcel导出报内存溢出的问题解决

    Java easyexcel导出报内存溢出的问题解决

    在Java开发时,使用EasyExcel处理大数据量导出可能遇到内存溢出问题,本文深入分析了内存溢出的原因,并提出了优化策略,感兴趣的可以了解一下
    2024-10-10
  • Java实现数据库连接的最详细教程分享

    Java实现数据库连接的最详细教程分享

    JDBC,Java Database Connectivity,即Java数据库连接,是 Java 中的一套和数据库进行交互的API,本文就来讲讲Java如何利用JDBC实现数据库的连接吧
    2023-05-05
  • java中gradle项目报错org.gradle .api.plugins.MavenPlugin解决办法

    java中gradle项目报错org.gradle .api.plugins.MavenPlugin解决办法

    在使用Gradle时开发者可能会遇到org.gradle .api.plugins.MavenPlugin报错提醒,这篇文章主要给大家介绍了关于java中gradle项目报错org.gradle .api.plugins.MavenPlugin的解决办法,需要的朋友可以参考下
    2023-12-12

最新评论