0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个"正规"的企业,哈哈,虽然有点戏谑,但是也从侧面证明了排序算法的重要性. 本文将介绍的是常见排序算法中的快速排序. 3.       快速排序 3.1  基本思想 快速排序是一种比较快的排序算法,其基本思想为设置两个指针i和j分别指向第一个和最后一个待排元素,i向后移动,j向前移动,一般选第一个数为…
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个"正规"的企业,哈哈,虽然有点戏谑,但是也从侧面证明了排序算法的重要性. 本文将介绍的是常见排序算法中的插入排序. 4  插入排序 4.1  基本思想 插入排序分为两种,一种是直接插入排序,一种是二分插入排序. 首先直接插入排序的基本思想是将序列分为排序好的部分和待排序部分,将待排序部分中的数据一个…
(代码中对应一个数组的下标),将每个元素放入对应桶中,再将所有元素按顺序输出(代码中则按顺序将数组i下标输出arrary[i]次),即为{0,1,3,5,5,6,9}. 1.2  代码实现 /* *@author Calvin in http://blog.csdn.net/seu_calvin/article/details/54800413 *@date 2017/01/31 */ public class Order { private int[] bucket; private int[…
个子块,即{3,5},{1,0},{5,2},{9,4},{6,12},将每个子块进行插入排序(即第i位与第i+5位进行比较交换),初步排序结果为{3,0,2,4,6,5,1,5,9,12}.希尔排序再将增量逐渐减小,进行5/2=2的分块,即{3,2,6,1,9},{0,4,5,5,12},同理插入排序得{1,0,2,4,3,5,6,5,9,12},最终进行2/2=1分块,即对上数列直接进行插入排序得到最终序列{0,1,2,3,4,5,5,6,9,12}. 5.2  代码实现 /* *@auth…
0. 前言 本系列文章将介绍一些常用的排序算法.排序是一个非常常见的应用场景,也是开发岗位面试必问的一道面试题,有人说,如果一个企业招聘开发人员的题目中没有排序算法题,那说明这个企业不是一个"正规"的企业,哈哈,虽然有点戏谑,但是也从侧面证明了排序算法的重要性. 本文将介绍的是常见排序算法中的冒泡排序. 2.  冒泡排序 2.1  基本思想 冒泡排序也是一种简单的排序算法,基本思想就是通过相邻两个数的循环比较,将n个数中最大/小的数一点一点推向一端,再进行下一轮的比较,即将剩余的n-1…
Java排序算法之快速排序 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. 一.快速排序算法的基本特性时间复杂度:O(n*lgn)最坏:O(n^2)空间复杂度:O(n*lgn)不稳定. 快速排序是一种排序算法,对包含n…
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数小于50的时候还不如简单的冒泡,直接插入排序,选择排序. 从空间复杂度看,归并排序需要辅助空间,快速排序也有相应的空间需求,堆排序则是少量索取,大量付出. 从稳定性上看,归并排序独占鳌头. 总之,综合各项指标,经过优化的快速排序是性能最好的排序算法,但不同的场合我们也应该考虑使用不同的算法来应对.…
java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右边.经过这样一趟下来,该序列形成左右两个子序列,左边序列中的数据元素的值都比分界值小,右边序列中数据元素的值都比分界值大.接下来对左右两个序列进行递归排序.对两个子序列重新选择中心元素并依此规则调整.直到每个元素子表的元素只剩下一个元素则排序成功 思路 1.定义一个变量 i变量从左边第一个索引开始,…
java排序算法(三)堆排序 堆积排序(HeapSort)是指利用堆积树这种结构所设计的排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法.辅助空间为O(1).最坏时间复杂度为O(nlog2n) 堆排序的堆序的平均性能较接近于最坏性能 堆排序利用大根堆(或者小根堆)堆顶记录的关键字最大(或者最小)这一特征.使得在当前无序区中选中最大(或者最小)关键字的记录变的简单 (1)最大堆的排序思想 · 1.先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区 2.再将关键…
总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O(n2)O(n2) O(n)O(n) O(1)O(1) 稳定 简单 希尔排序 O(nlog2n)O(nlog2n) O(n2)O(n2) O(n)O(n) O(1)O(1) 不稳定 较复杂 直接选择排序 O(n2)O(n2) O(n2)O(n2) O(n2)O(n2) O(1)O(1) 不稳定 简单…