![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
排序算法
Java语言常见的排序算法
自由梦想程序员
即将秃头的大学生一枚
展开
-
八大排序之归并排序
java中的Collections.sort()方法使用的是归并排序而不是效率最高的快速排序。原因是因为归并排序相比于快排有一个主要的优点:归并排序是稳定的,也就是说归并排序不会改变相等元素的顺序。归并排序最吸引人的性质是它能够保证将任意长度为N的数组排序所需时间和NlogN成正比;它的主要缺点则是它需要的额外空间和N成正比.归并就是将两个有序数组归并成一个更大的有序数组。原创 2022-10-25 15:15:22 · 347 阅读 · 0 评论 -
八大排序之选择排序
首先找到数组中最小的元素,其次,将他与数组的第一个元素交换位置(如果第一个元素就是最小元素,就自己和自己交换)。再次,就在剩下的元素中找到最小的元素,将其与第二个元素进行交换位置。选择排序的内循环只是在比较当前的元素与目前已知最小的元素,每次交换都能排定一个元素,因此交换次数总次数为N。所以算法的时间效率取决于比较的次数。2、数据移动是最少的。每次交换都会改变两个数组元素的值,因此选择排序用了N次交换——交换次数和数组大小是线性关系。对于长度为N的数组,选择排序大约需要N^2/2次比较和N次交换。原创 2022-10-24 22:02:36 · 214 阅读 · 0 评论 -
八大排序之选择排序
选择排序 首先学习最简单的排序,即选择排序 首先我们需要在数组中找到最小的元素,将其与第一个元素交换位置 其次在剩下的元素中找到最小的元素,与第二个元素进行交换 如此反复至所有元素都排序完毕 因为每次排序都能排定一个元素,所以交换总次数是N,所以算法时间效率取决于比较的次数 对于长度为N的数组,选择排序大约需要N^2/2次的比较和N次的交换 因此选择排序有两个鲜明特点 运行时间和输入无关 为了找出下最小元素而去扫描一遍数组并不能为下一次扫描提供信息,其他算法可能会善于利用输入的初始状态 数据移动是最少的原创 2022-05-20 17:36:03 · 255 阅读 · 0 评论 -
八大排序之插入排序
插入排序 在计算机中,为了给要插入的元素腾出空间,我们需要将其余所有元素在插入前都向右移动一位,这种算法就是插入排序 与选择排序一样,当前索引左边的所有元素是有序的,但他们最终位置不确定,为了给更小的元素腾出空间,他们可能会被移动。但当所有索引到达数组右端时,数组排序就完成了 和选择排序不同的是,插入排序所需要的时间取决于输入中元素的初始顺序。例如:对一个很大且其中元素已经有序(或接近有序)的数组将会比随机顺序的数组或是逆序的数组进行排序快的多 对于随机排列的长度为N且主键不重复的数组,平均情况下插入排序所原创 2022-05-21 11:51:23 · 198 阅读 · 0 评论 -
八大排序之希尔排序
希尔排序 希尔排序是一种基于插入排序的排序算法。 对于大规模乱序数组插入排序很慢,因为他们只会交换相邻的元素,因此元素只能一点一点的从数组一段移动到另一端。如果主键最小的元素正好再数组的尽头,要将她挪到正确的位置就需要N-1次移动,希尔排序为了加快速度简单的改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序将局部有序的数组排序。 希尔排序的思想就是使数组中任意相隔为h的元素都是有序的,这样的数组称为h有序数组。 实现希尔排序的一种方法就是对于每个h,用插入排序将h个子数组独立的排序。但原创 2022-05-22 19:03:31 · 217 阅读 · 1 评论 -
Java的快速排序(无代码展示)
Java的快速排序 由冒泡排序改进而成,其基本思想是在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,将该元素放入适当位置后,数据序列被此元素划分为两部分,所有关键字比该元素关键字小的元素放在前一部分,所有比他大的元素放在后面一部分,所以该元素排在这两部分中间(称为该元素归位),这个过程称为一趟快速排序,即一趟划分。 之后对产生的两个部分分别重复上诉过程,直至每个部分内只有一个元素或空为止。总而言之,每趟使表的第一个元素放入适当的位置,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表长原创 2021-10-30 20:12:06 · 62 阅读 · 0 评论 -
Java冒泡排序
Java冒泡排序 其基本思想就是通过无序区中的相邻元素关键字间的比较和位置的交换使关键字最小的元素如气泡一般逐渐往上”漂浮“直至”“水面” public class demo4{ public static void main(String[] args) { int[] a=new int[]{45,-1,-5,-8,10,90,320}; for(int i=0;i<a.length-1;i++){ for(int j=0;j<a.length-1;j原创 2021-10-30 18:20:21 · 58 阅读 · 0 评论 -
Java二分法查找
Java二分法查找 public class demo3 { public static void main(String[] args) { int[] a=new int[]{1,2,3,4,5,6,7,8,9}; //二分法查找,所查找的数组必须有序 boolean b=true; int target=4; int head=0;//定义初始化位置 int end=a.length-1;//定义末端位置原创 2021-10-30 16:51:07 · 154 阅读 · 0 评论 -
Java数组的排序查找
Java数组的排序查找 public class demo3 { public static void main(String[] args) { int[] a=new int[]{9,8,7,6,5,4,3,2,1}; //查找 //线性查找 int target=5; for(int i=0;i<a.length;i++){ if(a[i]==target){原创 2021-10-30 16:17:31 · 93 阅读 · 0 评论 -
Java中数组反转
Java中数组反转 就是前后元素互相调换 public class demo3 { public static void main(String[] args) { int[] a=new int[]{9,8,7,6,5,4,3,2,1}; for(int i=0;i<a.length/2;i++) { int temp = 0; temp = a[i]; a[i] = a[a.length原创 2021-10-30 16:09:57 · 138 阅读 · 0 评论