排序算法
排序算法
dosafdc
这个作者很懒,什么都没留下…
展开
-
sort的重写(Comparator--compare)
先看代码在分析吧public static void main(String[] args) { Scanner sc=new Scanner(System.in); long [][]arr=new long [2][5]; for(int i=0;i<2;i++) { for(int j=0;j<5;j++) { arr[i][j]=sc.nextLon...原创 2020-05-05 23:03:26 · 459 阅读 · 0 评论 -
十大排序之快速排序(七)
快速排序使用分治法策略来把一个序列分为两个子序列。快速排序是二叉查找树(二叉搜索树)的一个空间最优化版本。不是循序地把数据项插入到一个明确的树中,而是由快速排序组织这些数据项到一个由递归调用所隐含的树中。这两个算法完全地产生相同的比较次数,但是顺序不同。对于排序算法的稳定性指标,原地分区版本的快速排序算法是不稳定的。其他变种是可以通过牺牲性能和空间来维护稳定性的步骤为:1、划分-------...原创 2020-04-19 21:36:42 · 144 阅读 · 0 评论 -
十大排序之归并排序(六)
归并排序是一种高效、通用、基于比较的排序算法。此外,归并排序还是稳定的,因为相同元素的相对次序在排序后不会发生变化。时间复杂度:O(nlgn)思路:将一个数组先分成两份,再分成四分,依次向下推,将每个部分分别排序,将排好序的各个部分再进行合并,得到排好序的数组代码思路:将数组分为左右两个数组,递归调用并进行排序分别排序完成后,使用辅助的合并函数将两个有序的子数组合并成一个整体有序的数组代...原创 2020-04-17 21:49:47 · 216 阅读 · 0 评论 -
十大排序之桶排序(五)
感觉桶排序相对其他的来说用到的空间量较大,但同时时间复杂度为O(n)理解:假如所要排序的为{0,9,8,7,6,5,4,3,2,1},我们可以用10个桶装这是个数据,所以我们只需要入桶、出桶就可以完成排序,当然这样会耗费大量的空间,所以我们要控制桶的多少,保证代码趋向最优化,所以我们需要找到这个数列的最大值最小值确定桶的多少和大小,然后对桶内的数据排序,出桶,成功完成排序。由于每个桶内的元素的...原创 2020-04-15 21:50:30 · 140 阅读 · 0 评论 -
十大排序之希尔排序(四)
希尔排序插入排序的一种也称缩小增量排序,非稳定排序算法思路:如序列9 8 7 6 5 4 3 2 1确定一个增量序列,如4(length/2) 2 1,使用第一个增量4,将序列划分为若干个子序列,下标组合为0-4-8,1-5,2-6,3-7依次对子序列使用直接插入排序使用第二个增量2,将序列划分为若干个子序列,(0-2-4-6-8),(1-3-5-7)依次对子序列使用直接插入排序...原创 2020-04-14 21:38:40 · 593 阅读 · 0 评论 -
十大排序之插入排序(三)
插入排序:时间复杂度O(n^2)思路:从第二个元素开始遍历数组,记录当前的数字,然后与前面的每一个数字比较,如果大于当前的数字则将当前的该数据向后移动,如果小于则将记录的数据放在空缺的位置。代码: int[] arr = {67,23,30,4,5,3,76}; int temp=0;//获取当前的值 for(int i=1;i<arr.length;i++) { t...原创 2020-04-11 13:48:25 · 69 阅读 · 0 评论 -
十大排序之选择排序(二)
选择排序:思路也较为简单,但是时间复杂度也较高O(n)~O(n^2)思路:两层循环,内循环每次找到值最小的下标同前面的数经行交换达到排序的目的public static void main(String[] args) { int[] arr = {67,32,12,34,56,78,89}; int min=0; int n=0; int temp=0; for(int ...原创 2020-04-11 10:34:08 · 79 阅读 · 0 评论 -
十大排序之冒泡排序(一)
冒泡排序:该种排序是我学习编程以来第一次用过的方法,比较简单,但时间复杂度较高思路:通过遍历整个数组,每次找出最大值放在尾部讲数组排序由于每次遍历后就确定了一个最大值,所以内部循环就减少一次时间复杂度O(n^2)代码:public class 冒泡排序 { public static void main(String[] args) { int[] arr = {23,45,67,...原创 2020-04-10 23:32:48 · 111 阅读 · 0 评论