当前位置: 首页 > news >正文

面向对象程序设计之sort排序

目录

java

升序 

降序 

c# 

升序 

倒序

小结 


敲过排序算法的都会的,Sort排序与compareTo的改写。

java

升序 

一般自带的sort方法就是升序的。

Arrays.sort(arr);//传入要排序的数组,默认升序
Collections.sort(list);//传入要排序的集合类,默认升序
降序 

数组的可以传多个参数表示倒序,要了解一下比较器的规则。

//Arrays.sort(arr, new Comparator());第一个参数是待排序数组,第二个参数是改写的比较器 
Arrays.sort(arr, new Comparator());//改写Comparator()
//o1小于o2返回正值,o1大于o2返回负值,颠倒一下,即可实现降序排序
public int compare(Integer o1, Integer o2) {return o2 - o1;
}//数据类型如int、‌double等不支持Comparable接口,可以通过包装类如Integer‌
Arrays.sort(arr, Collections.reverseOrder());//Collections要用包装类
Arrays.sort(arr,(s1,s2)->s2.compareTo(s1));//lambda 表达式调用
Arrays.sort(arr,(o1,o2)->o2 - o1);//通过lambda 表达式的返回值实现降序排序,也是用包装类Integer//Arrays.sort(arr, start, end, new Comparator());int类型可以用四个参数的,注意中间两个参数是左开右闭的
Arrays.sort(a,0,cnt,(o1,o2) -> new Double(o2.n).compareTo(new Double(o1.n)));

集合类跟数组差不多,可以用方法、内部类或lambda 表达式回调。

//Collections.sort(arr, new Comparator());集合类类似,比较器也可以直接写方法进参数
Collections.sort(list, new Comparator<Integer>() {public int compare(Integer o1, Integer o2) {return o2 - o1;}
});//使用Collections的sort方法,重写compare方法

c# 

升序 

自带的Sort也是默认升序的,但注意看准参数,不要混淆。

Array.Sort(arr);//传入要排序的数组,默认升序,注意是Array不是Arrays
l.Sort();//传入要排序的集合类,默认升序,l是List集合类的实例化对象
倒序

可以写一个方法,类似java的比较器,排前面后面多看看就孰能生巧了。

//编写倒序的Sort方法
int Sort(s1,s2)
{
//以后面传入的数s2为基准,s1在s2的前面还是后面,即排在左边还是右边if (s1>s2){return -1;//返回一个负数,表示s1在s2的左边(s1是较大数)//return s2-s1;}else if (s1<s2){return 1;//返回一个正数,表示s1在s2的右边(s1是较小数)//return s1-s2;}else{return 0;          }
};

当然,c#的数组集合类倒序实现还简单一点,实在理解不了把下面常见的记熟了,记住倒序倒一下即可。

//升序后直接倒
Array.Reverse(arr);
//lambda 表达式调用
Array.Sort(arr, (s1, s2) => s2.CompareTo(s1));
//lambda 表达式调用,小白式读法,如果s1大于s2,返回一个负数表示s1在s2的左边(s1是较大数),否则返回一个正数表示s1在s2的右边(s1是较小数)
Array.Sort(arr, (s1, s2) => s1 > s2 ? -1 : 1);
//取相反或倒过来
l.Sort((x, y) => -x.CompareTo(y));
//注意别被绕晕,s1、s2倒一下就刚好对应倒序
l.Sort(s1, s2) => s2.n > s1.n ? 1 : -1;

小结 

在处理简单的升序排序中,java跟c#的sort的理解助你勇闯排序算法,手撕排序。

http://www.lryc.cn/news/411455.html

相关文章:

  • ARM学习(29)NXP 双coreMCU MCXN94学习
  • 视频剪辑免费素材哪里能找到?
  • 多线程为什么是你必需要掌握的知识
  • 转转上门履约服务拆分库表迁移实践
  • upload-labs 1-19关 攻略 附带项目下载地址 小白也能看会
  • 如何设置SQL Server的端口:详细步骤指南
  • 昇思25天学习打卡营第16天|Diffusion扩散模型,DCGAN生成漫画头像
  • 【吊打面试官系列-Dubbo面试题】Dubbo SPI 和 Java SPI 区别?
  • 7.31 Day13 网络散记(http,https...)
  • LumaLabs 用例和应用分析
  • leetcode88.合并两个有序数组(简单题!)
  • 鸿蒙(HarmonyOS)DatePicker+TimePicker时间选择控件
  • 2024年和2025年CFA FRM CAIA ESG自己整理的资料
  • AMD第二季度财报:数据中心产品销售激增,接近总收入一半
  • ThreadLocal详解及ThreadLocal源码分析
  • FastGPT、Dify、Coze产品功能对比分析
  • 【Linux】缓冲区的理解
  • 基于单片机的电梯控制系统的设计
  • IP-GUARD文档云备份服务器迁移数据操作说明
  • linux常用命令ls详细说明
  • Python3网络爬虫开发实战(4)数据的存储
  • 《C++基础入门与实战进阶》专栏介绍
  • 每天一个数据分析题(四百五十)- 数据清洗
  • 昇思25天学习打卡营第XX天|Pix2Pix实现图像转换
  • 数据结构经典测试题5
  • React Native初次使用遇到的问题
  • 2024西安铁一中集训DAY28 ---- 模拟赛(简单dp + 堆,模拟 + 点分治 + 神秘dp)
  • 【论文阅读笔记 + 思考 + 总结】MoMask: Generative Masked Modeling of 3D Human Motions
  • Mojo控制语句详解
  • web安全基础学习