排序
草莓味儿的小米佳
Man proposes,God disposes.
展开
-
入门算法:小和问题 之归并排序思想 java语言
题目在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例子[1,3,4,2,5]1左边比1小的数:没有3左边比3小的数:14左边比4小的数:1,32左边比2小的数:15左边比5小的数:1,3,4,2所以小和为1+1+3+1+1+3+4+2=16解题思路如果直接用两层for循环扫,时间复杂度是O(n^2),但是可以通过归并排序的方法将时间复杂度降到O(nlogn).如果不了解归并排序算法的可以先看看这篇博客:https://blog.csdn.n原创 2021-03-01 00:53:09 · 328 阅读 · 1 评论 -
面试常见几种排序算法 Java代码总结
以下所有swap方法里面的代码都与如下代码等价:int tenp = arr[i];arr[i] = arr[j];arr[j] = temp;mid = (left + right) / 2;与如下代码等价:mid = left + ((right - left) >> 2);left + right 可能会造成溢出,不安全,但是right - left不会造成溢出,且位运算速度比四则运算快很多,右移相当于除以2一、冒泡排序public static void bub原创 2021-03-01 00:40:19 · 295 阅读 · 2 评论 -
直接插入排序 java实现 简单易懂 详细
直接插入排序1.原理:把n个待排序的元素看成一个有序表和一个无需表,开始的时候有序表只有1个元素,无序表中有n-1个元素每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。2.实例:0.初始状态 3,1,5,7,2,4,9,6(共8个数)有序表:3;无序表:1,5,7,2,4,9,61.第一次循环,从无序表中取出第一个数 1,把它插入到...原创 2019-04-03 18:18:31 · 4710 阅读 · 1 评论 -
归并排序 Java实现 简单易懂
归并排序归并排序采用的是分治(divide-and-conquer)法思想。1.基本思想:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。2.执行过程:3.时间复杂度 对长度为n的文件,需进行趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。 4.空间复杂...原创 2019-04-03 12:06:37 · 503 阅读 · 1 评论 -
直接选择排序(简单排序) java实现 简单易懂 适合新手
直接选择排序(简单排序) java实现基本思想:每一趟从待排序的数据元素中选出最小(最大)的元素,顺序放在待排序的数列最前,直到全部待排序的数据元素全部排完。特点:数据结构:数组稳定性:不稳定过程:初始关键字:『 8,5,2,6,9,3,1,4,0,7 』第一趟排序后:0,『5,2,6,9,3,1,4,8,7』第二趟排序后:0,1,『2,6,9,3,5,4,8,7』第三趟排序后...原创 2019-04-03 11:04:09 · 623 阅读 · 0 评论 -
桶排序 java实现
桶排序(BucketSort)一、思想一句话总结:划分多个范围相同的区间,每个自区间自排序,最后合并。(适用于数据量大的时候,可以通过空间换时间)桶排序是计数排序的扩展版本,计数排序可以看成每个桶只存储相同元素,而桶排序每个桶存储一定范围的元素,通过映射函数,将待排序数组中的元素映射到各个对应的桶中,对每个桶中的元素进行排序,最后将非空桶中的元素逐个放入原序列中。桶排序需要尽量保证元素分...原创 2020-02-15 18:30:14 · 368 阅读 · 0 评论 -
快速排序(QuickSort) ---JAVA实现 带图详细 适合新手入门
**快速排序(QuickSort) —JAVA实现 带图详细适合新手入门**快速排序的原理:选择一个关键值作为基准值(一般都选择第一个数字)。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比...原创 2019-03-26 13:49:45 · 344 阅读 · 0 评论 -
堆排序 java实现 简单易懂
堆排序堆排序的时间复杂度O(N*logN),额外空间复杂度O(1),是一个不稳定性的排序堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆性质:每个结点的值都大于其左孩子和右孩子结点的值,称之为大根堆;每个结点的值都小于其左孩子和右孩子结点的值,称之为小根堆。如下图上面的结构映射成数组就变成了下面这个样子还有一...原创 2019-04-14 12:04:09 · 540 阅读 · 0 评论 -
java 冒泡排序
java 冒泡排序原理:每次比较两个相邻的元素,将较大的元素交换至右端。思路:每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序,一次冒泡至少让一个元素移动到它应该排列的位置,重复N次,就完成了冒泡排序。通过一个图来简单理解一下一次冒泡的过程【注意:图中每一竖列是一次比较交换】:图中可以看出,经过一次冒泡,6这个当前数组中最大的元...原创 2019-06-26 10:19:43 · 139 阅读 · 0 评论