当前位置:   article > 正文

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

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

目录

java

升序 

降序 

c# 

升序 

倒序

小结 


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

java

升序 

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

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

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

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

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

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

c# 

升序 

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

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

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

  1. //编写倒序的Sort方法
  2. int Sort(s1,s2)
  3. {
  4. //以后面传入的数s2为基准,s1在s2的前面还是后面,即排在左边还是右边
  5. if (s1>s2)
  6. {
  7. return -1;//返回一个负数,表示s1在s2的左边(s1是较大数)
  8. //return s2-s1;
  9. }
  10. else if (s1<s2)
  11. {
  12. return 1;//返回一个正数,表示s1在s2的右边(s1是较小数)
  13. //return s1-s2;
  14. }
  15. else
  16. {
  17. return 0;
  18. }
  19. };

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

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

小结 

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/948146
推荐阅读
相关标签
  

闽ICP备14008679号