大家好,又见面了,我是你们的朋友全栈君。 Java的冒泡排序 一、冒泡排序基本概念 冒泡排序,顾名思义,像冒泡一样的排序。...(n是需要排序数字的个数) 二、java代码实现的基本思路 利用二重for循环实现,外重循环设为i(每一趟),内重循环设为j(每一趟的每一次比较),假设有n个数字需要排序,设int[] num=new...三、java代码实现 package bubble; import java.util.Arrays; public class Demo_01 { public static void main(...在新一轮排序开始前检查flag的值,如果flag=true,就说明上一次没有数据交换,那么就结束排序,否则就再开始下一轮排序。...五、优化后的java代码实现 package bubble; import java.util.Arrays; public class Demo_01 { public static void main
Java集合的排序 List list = new ArrayList(); list.add("hello"); list.add("zs"); list.add("lisi");...Collections.sort(list); System.out.println("默认排序"); for (String s : list) { System.out.println(s...); } System.out.println("自定义排序"); // 自定义排序 idea 推荐写法 // 根据字符串长度排序(或者用户的年龄啥的) list.sort(Comparator.comparingInt...list, (s1, s2) -> s1.length() - s2.length()); for (String s : list) { System.out.println(s); } 默认排序...hello lisi zs 自定义排序 zs lisi hello
写了2个形式的,原理差不多,都是找基数,递归到一个结束。但是细节和交换上有所不同。...11 6 8 0 33 78 65 22 ######### 每一次左右轮换的结果为 11 6 8 0 33 78 65 22 ######### 基数为:3 基数定位的结果为: ------**...**------- 0 6 8 11 33 78 65 22 ++++++++++ 每一次左右轮换的结果为 0 6 8 11 33 78 65 22 ######### 基数为:0 基数定位的结果为:...基数定位的结果为: ------****------- 0 6 8 11 33 78 65 22 ++++++++++ 每一次左右轮换的结果为 0 6 8 11 33 22 65 78 #######...////// 0 8 11 22 33 65 66 78 快速排序设计到了递归,有点不好理解,相关东西可以网上多查看一下
大家好,又见面了,我是你们的朋友全栈君。 一、冒泡排序: 利用冒泡排序对数组进行排序 二、基本概念: 依次比较相邻的两个数,将小数放在前面,大数放在后面。...四、java代码实现: package 冒泡排序; import java.util.Arrays; /** * 冒泡排序 * @author chen * */ public class BubbleSort...在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序; package 冒泡排序; import java.util.Arrays; /** * 冒泡排序改进版...局部冒泡排序与冒泡排序算法具有相同的时间复杂度,并且在正序和逆序的情况下,所需的关键字的比较次数和移动次数完全相同。...由于局部冒泡排序和冒泡排序的数据移动次数总是相同的,而局部冒泡排序所需关键字的比较次数常少于冒泡排序,这意味着局部冒泡排序很可能在平均比较次数上对冒泡排序有所改进,当比较次数较少的优点不足以抵消其程序复杂度所带来的额外开销
首先说明下这篇文章适合于对电源技术浅尝辄止的初学者,之所说适合是因为包括很多专业技术人员,在入门电源技术之初,基本都会陷入诸如“LDO与DC-DC区别”、“LDO与DC-DC在选型上该如何取舍”等问题...对于DC-DC,你依然可以用水的概念理解: LDO:你有一盆水要分给一个小杯子一样,你必须用另外一个盆子去装剩余的水 DC-DC:你有一盆水要分给一个小杯子,你找来了一个水龙头,你通过调节水龙头水量的大小...实际上,DC-DC的基本类型之一如下,DC-DC的晶体管电路处于开关状态,它将能量一点点给予到输出,如同一个车挤满了人,一辆辆大巴一趟又一趟地将人群输送到目的地。...而,LDO的晶体管电路处于放大状态,因此输出不需要用到的能量必须由晶体管电路进行承担消耗,由此这也就可以理解DC-DC的能量转化比较高,因为它分为多次传送,理想状态下不需要中间额外的消耗。...因此对于转化效率要求比较高的设计中,选用DC-DC会更加靠谱,就比如220V的电压,你想要降为2.5V给LED灯,当你使用LDO时,有220-2.5 = 217.5V的剩余电压额外消耗,此时乘以流过的电流
大家好,又见面了,我是你们的朋友全栈君。 TreeSet使用元素的自然顺序对元素进行排序,或者根据创建set时提供的Comparator进行排序,具体取决于使用的构造方法。...通俗一点来说,就是可以按照排序后的列表显示,也可以按照指定的规则排序。...set.add(“b”); set.add(“c”); set.add(“d”); set.add(“e”); System.out.println(set); 输出:[a, b, c, d, e, f] ,按照排序后输出...注意:一定要定义一个排序规则类实现Comparator接口,与上面的方法类似 public class TreeSetTest2 { public static void main(String[]...public int compare(Person o1, Person o2) { return o1.score – o2.score; } } 输出:10 20 30 40 如果按照一个人的分数的倒序排列
插入排序 对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。...每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。...对于归并排序排序在数组排序中的运用,详细请点击此处。...这里主要介绍归并排序在链表排序中的运用。...在使用归并排序算法进行链表排序时,其基本思想是将链表细分成一个个子链表,将子链表进行排序,然后再将相邻的两个有序子链表进行合并,得到更长的有序链表,最后一步步得到整个有序链表,子链表进行合并排序时需要用到合并两个有序链表算法
冒泡排序 基本特点 (1)基于交换思想的排序算法 (2)从一端开始,逐个比较相邻的两个元素,发现倒序即交换。 ...(3)一次遍历,一定能将其中最大(小)的元素交换到其最终位置上 排序过程模拟 ? ...array[j+1]=temp; } } System.out.print("第"+(i+1)+"次排序的结果...然后再对左右两部分分别进行快速排序,直到每个子表仅有一个元素或为空表为止。 划分方法 1.中间元素的选择:作为参考点的中间数的选择没有特别的规定, 本次默认为第一个元素。 ...4.此刻,后面便有了一个空位置(j),可从前面开始往后搜索一个比中间数小的元素,并将其放置到前面的位置。4.重复1 2 ,直到两边搜索的空位重合(i=j)。 排序过程模拟 ?
大家好,又见面了,我是你们的朋友全栈君。 常见几种java排序算法 1.插入排序 2.分治排序法,快速排序法 3.冒泡排序 low版 4.冒泡排序 bigger版 5.选择排序 6....比较 1.插入排序 这个打麻将或者打扑克的很好理解, 比如有左手有一副牌1,2,4,7 ,来一张3的牌, 是不是就是手拿着这张牌从右往左插到2,4之间 一次插入排序的操作过程: 将待插元素,依次与已排序好的子数列元素从后到前进行比较...快速排序法 简单的说, 就是设置一个标准值, 将大于这个值的放到右边(不管排序), 将小于这个值的放到左边(不管排序), 那么这样只是区分了左小右大, 没有排序, 没关系, 左右两边再重复这个步骤.直到不能分了为止...选择排序也是一种简单直观的排序算法,实现原理比较直观易懂: 首先在未排序数列中找到最小元素,然后将其与数列的首部元素进行交换,然后,在剩余未排序元素中继续找出最小元素,将其与已排序数列的末尾位置元素交换...这也容易理解为什么选择排序为啥比插入排序慢了. 插入排序是摸一张牌, 然后直接插入到手中已经排好序的牌,再摸下一张牌. 选择排序相当于在一堆牌中, 不断的找到最小的牌往前面放.
int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) {//每次循环代表一轮冒泡,一轮冒泡后顶端的数字一定是最大的...arr[j] = tmp; } } } return arr; } 快速排序...Arrays.toString(arr)); quick_sort(arr, start, s - 1); quick_sort(arr, s + 1, end); } 快速排序...[start]; int s = start; int e = end; while (s < e) { //退出循环代表一轮排序结束...e--; } while (s < e && (arr[s] <= x)) // 从右向左找第一个小于x的数
大家好,又见面了,我是你们的朋友全栈君。 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。...最终将会得到这样的序列,如下 1 2 3 4 5 6 7 8 9 10 到此,排序完全结束。...细心的同学可能已经发现,快速排序的每一轮处理其实就是将这一轮的基准数归位,直到所有的数都归位为止,排序就结束了。下面上个霸气的图来描述下整个算法的处理过程。 这是为什么呢?...快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。...因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。其实快速排序是基于一种叫做“二分”的思想。我们后面还会遇到“二分”思想,到时候再聊。
大家好,又见面了,我是你们的朋友全栈君。...= {10, 2, 5, 7, 23, 59, 3}; bubbleSort(a); System.out.println(Arrays.toString(a)); } } 当然,上面的代码可以小小的优化一下...在使用冒泡排序的时候有可能会遇到这样一种情况:某一趟排序从头到尾,数组中的数字都没有发生位置交换。 那么上面这种情况说明了什么呢?说明了在经过上一趟的排序后,整个数组就已经被排好序了。...这么说的话原来计划的N-1趟排序我们是不是可以不用跑满了?是的!...所以可以优化的地方是:在每一趟排序排完后,看一下这一趟有没有发生数字位置 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152139.html原文链接:https:
首先说明下这篇文章适合于对电源技术浅尝辄止的初学者,之所说适合是因为包括很多专业技术人员,在入门电源技术之初,基本都会陷入诸如“LDO与DC-DC区别”、“LDO与DC-DC在选型上该如何取舍”等问题,...对于DC-DC,你依然可以用水的概念理解: LDO:你有一盆水要分给一个小杯子一样,你必须用另外一个盆子去装剩余的水 DC-DC:你有一盆水要分给一个小杯子,你找来了一个水龙头,你通过调节水龙头水量的大小...实际上,DC-DC的基本类型之一如下,DC-DC的晶体管电路处于开关状态,它将能量一点点给予到输出,如同一个车挤满了人,一辆辆大巴一趟又一趟地将人群输送到目的地。...而LDO的晶体管电路处于放大状态,因此输出不需要用到的能量必须由晶体管电路进行承担消耗,由此这也就可以理解DC-DC的能量转化比较高,因为它分为多次传送,理想状态下不需要中间额外的消耗。...因此对于转化效率要求比较高的设计中,选用DC-DC会更加靠谱,就比如220V的电压,你想要降为2.5V给LED灯,当你使用LDO时,有220-2.5 = 217.5V的剩余电压额外消耗,此时乘以流过的电流
Java 中提供了丰富的排序算法,可以满足各种排序需求,下面是 Java 中常用的排序算法及其实现。...冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来,直到没有任何一对数字需要比较为止。...选择排序是一种简单直观的排序算法,它的工作原理是:首先在未排序的数列中找到最小元素,然后将其存放到数列的起始位置,接着再从剩余未排序的元素中继续寻找最小元素,然后放到已排序序列的末尾,以此类推,直到所有元素均排序完毕...插入排序是一种简单的排序算法,它的工作原理是:将待排序的数列分为两个部分,已排序和未排序,从未排序的部分取出第一个元素,插入到已排序部分的正确位置,然后继续取出未排序部分的第一个元素,插入到已排序部分的正确位置...快速排序是一种高效的排序算法,它的工作原理是:选择一个基准元素,将小于基准元素的元素放在基准元素的左边,将大于基准元素的元素放在基准元素的右边,然后递归地对基准元素左右两部分进行排序,直到所有元素均排序完毕
ns[i]=ns[j]; ns[j]=w; } } } // 排序后
选择排序思想:指针指向数组头,从指针位置到数组尾遍历最小值位置,将该位置与指针位置交换值,指针向后位移一位,循环遍历最小值 实现代码: /** * 选择排序 *...:基于选择排序,但有很大不一样。...,获取“比取出的元素“的值(31)大的索引,放入high指针位置 5.循环第3步,直到两个指针重合 6.将”取出的元素“的值(31)放入指针位置 7.从该位置进行二分,以数组头部到low-1位置和...for (int i : nums) { System.out.print(i + " "); } 结果: 0 1 1 3 5 7 9 快速排序对大数据量排序有很高的性能...另外大量重复数据也会对快速排序性能有影响,重复的部分会在high和low换来换去
一、数组排序 //对数组排序 public void arraySort(){ int[] arr = {1,4,6,333,8,2}; Arrays.sort(arr);//使用...java.util.Arrays对象的sort方法 for(int i=0;i<arr.length;i++){ System.out.println(arr[i]);...} } 二、集合排序 public void sort(){ List list=new ArrayList(); list.add("5sss"); list.add...sort() 方法默认是升序的。如果要降序 第一种 就是重写方法我 觉得这种太蠢了!不描述 百度搜索sort()降序会出来一大堆。...面试中如果需要排序 可以直接用这个方法 当然也可以用其他的 排序 。
1)、若选用无参的new TreeSet()构造器,需要元素本身可以排序方能使用,也即实体类实现java.lang.Comparable接口重写compareTo接口。 ...super E> comparator)构造器,需要提供额外的排序业务类(匿名内部类的方式)实现java.util.Comparator接口,重写compare方法。 ...super E> comparator)构造器--提供额外的业务排序类(匿名内部类的方式) package top.wfaceboss.caseSort; import java.util.TreeSet...重写compareTo接口 ,因此需要提供额外的业务排序类,否则会出错 TreeSet persons = new TreeSet(new java.util.Comparator...2.TreeMapt:键可以排序且不可重复。 其键的排序方式与上述相同。
当然了,这也是非常基础的一种算法,一般找工作有些公司喜欢出笔试题。 下面我们来看看java中的Arrays.sort(int []a)方法是怎么实现的。...---- 二、快速排序 java中Arrays.sort使用了两种排序方法,快速排序和优化的合并排序。...快速排序主要是对哪些基本类型数据(int,short,long等)排序, 而合并排序用于对对象类型进行排序。 使用不同类型的排序算法主要是由于快速排序是不稳定的,而合并排序是稳定的。...这里的稳定是指比较相等的数据在排序之后仍然按照排序之前的前后顺序排列。...1.实现原理 java1.7之后的版本,开始用双轴快排取代了以前的排序算法,现在只实现了8种基本数据类型性的双轴快排,对象的排序在1.7中还在用老式的,不过都标了过时,估计以后版本中就会被新的双轴快排取代了
...... (3)如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成 (4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的...,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数 (2)冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值...如上例:第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面,第三趟比较的时候,只需要比较除了最后两个数以外的其他的数...(3)时间复杂度 1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。...2.如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: ?
领取专属 10元无门槛券
手把手带您无忧上云