java中的sort排序实现原理,javasort排序算法

  java中的sort排序实现原理,javasort排序算法

  00-1010前言升序排序和降序排序原理概述

  00-1010手工写排序算法效率很慢。当然,这不利于我们在比赛或者项目上的实战。现在,几乎每种语言的标准库中都有排序算法。今天我来给大家讲解一下Java语言中的sort排序。

  00-1010 collections类中的sort方法可以实现列表界面集合的排序。

  public static void main(string[]args){//定义一个5元素的数组double [] scores=new double [] {78,45,85,97,87 };System.out.println(排序前数组的内容如下:);//在scores数组中循环for(int I=0;I分数.长度;I){ system . out . print(scores[I] t );} system . out . println( n排序的数组内容如下:);//对数组Arrays.sort(分数)进行排序;//遍历排序后的数组for(int j=0;j分数.长度;j){ system . out . print(scores[j] t );}}

  00-1010 Java中降序排序有两种方式(类似C,可以看我的博客):

  c排序排序排序

  使用Collections.reverseOrder()方法。

  public static void main(String[]args){ Integer[]a={ 9,8,7,2,3,4,1,0,6,5 };//数组类型为IntegerArrays.sort (a,collections . reverse order());for(int arr : a){ system . out . print(arr );}}实现比较器接口的replication compare()方法。

  public class test { public static void main(string[]args){/* *注意,要改变默认的排序顺序,不能使用基本类型(int,double,char)而是使用它们对应的类*/integer [] a={9,8,7,2,3,4,1,0,6。//定义自定义类MyComparator的对象,Comparator CMP=new my Comparator();Arrays.sort(a,CMP);for(int arr : a){ system . out . print(arr );} } }//实现比较器接口类我的比较器实现比较器integer { @ override public int compare(integer o1,integer o2) {/* *如果O1小于o2,我们就返回一个正值,如果O1大于O2,我们就返回一个负值,这样就可以反过来实现降序排序,否则可以自定义升序排序*/返回O2-O1;}}

  00-1010好奇sort方法是怎么排序的?

  通常看算法方面的书,你会发现都在讲数组的排序算法,都是用随机存取,但是我们知道数组随机存取快,链表随机存取慢!实际上,您可以使用合并排序方法来高效地对链表进行排序。但是,Java不这样做。它将所有元素转移到一个数组中,对数组进行排序,然后将排序后的序列复制回列表。

  事实上,Collections.sort方法的底层是被调用的Arrays.sort方法,Arrays.sort使用两种排序方法,快速排序和优化合并排序。

  快速排序主要用于对基本类型的数据(int、short、long等)进行排序。),而合并排序用于对对象类型进行排序。使用不同类型的排序算法主要是因为快速排序不稳定,而合并排序是稳定的。在这里,稳定是指相对相等的数据仍然按照排序前后的顺序排列。对于基础数据类型,稳定性没有意义,但对于对象类型,稳定性更重要,因为对象相等的判断可能只判断关键属性,相等对象的非关键属性的顺序最好与排序前保持一致;另一个原因是归并排序比快速排序比较的次数相对少,移动(对象引用的移动)的次数比快速排序多,但是对于对象来说,比较一般比移动花费的时间多。此外,对大型数组进行排序。快速排序sort()是递归实现的,数组太大会发生堆栈溢出,而归并排序()是非递归实现的,所以不存在这个问题。

  sort()是根据需要排序的数组的长度进行区分的:

  首先,确定要排序的数据量是否大于60。小于60:使用插入排序,插入排序是稳定的。大于60的数据量将按照数据类型排序:基本类型:使用快速排序。“因为基本类型不需要考虑稳定性”对象类型:使用归并排序“因为归并排序具有稳定性”

  注意:无论是快速排序还是归并排序。在二分法的情况下,小于60的数据量仍然会使用插入排序。

  关于稳定性,我们用下面的例子来说明:

  假设,有一个按姓名排序的员工列表,现在我们要按工资再次排序。两个员工工资刚好一样怎么办?如果采用稳定的排序方法,将保留按名称排序。换句话说,我们最终得到的是一个先按姓名排序,再按工资排序的表。

  00-1010关于Java中排序函数的这篇文章到此为止。有关Java中排序函数的更多信息,请搜索《流行IT》之前的文章或继续浏览下面的相关文章。我希望你将来能支持流行它!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: