常见排序算法
算法能提高你的思维,而思维是编程的灵魂!
DJH2717
努力从来都不会白费!
要学会发现问题,揣摩问题,思考问题,最后再解决问题!!
展开
-
希尔 排序
基本思想: 希尔排序是对 直接插入排序的改进, 其具体思想为对整个数组用增量来进行分组, 对分组后的数组分别使用简单的直接插入排序, 然后不断的缩小分组, 直到分组为 1, 此时数组绝大部分元素已经有序, 只需要对少量元素进行交换. 大体实现过程: 使用希尔建议的增量, 不断的对数组长度/2 得到增量序列, 对每一个增量都从第一个元素开始按照增量分组, 对分组类的元素进行简单插入排序, 直到最后增...原创 2019-07-01 22:02:15 · 172 阅读 · 0 评论 -
插入 排序
基本思想: 插入排序主要思想是把一个数组分为两部分, 已排序和未排序部分, 每次从未排序中选取一个元素通过前后比较并交换插入到已经排序的有序数组中. 通常把第一个元素作为已排序数组, 后续的元素作为未排序数组, 不断的选取元素插入到排序数组中, 直到剩下元素为零. 最好最坏时间复杂度: 插入排序是稳定排序. 平均时间复杂度为 O(n2). Java 代码实现: package my.co...原创 2019-07-01 17:15:31 · 193 阅读 · 0 评论 -
堆 排序
基本思想: 堆 排序是对简单选择排序的改进, 其利用了大根堆或者小根堆的性质. 大致过程为 先对一个数列 自底向上 构建一个大根堆, 然后交换第一个元素和最后一个元素, 交换后再 自顶向下 构建大根堆后, 再把第一个元素和倒数第二个元素交换, 重复这个过程. 图: 最好最坏时间复杂度: 堆排序是稳定排序, 时间复杂度总能维持在 O(N*logN). java 实现: packag...原创 2019-05-29 21:20:17 · 192 阅读 · 0 评论 -
归并排序
基本思想: 归并排序利用了分治的思想, 把一个较大的问题拆分成一系列的小问题, 分别对这些小问题进行求解, 然后把这些小问题的解组合起来对大问题的求解. 大体过程为: 把一个数列递归的拆分成较小的左右两部分, 分别对这些小数列进行排序, 然后把一个个排好序的小数组合并成一个排好序的大数组, 从而实现整个数组有序. 最好最坏时间复杂度: 归并排序是一种稳定排序, 时间复杂度总能维持在 O...原创 2019-05-29 15:17:46 · 149 阅读 · 0 评论 -
快速排序
基本思想: 选取一个基数(通常为第一个或者最后一个), 在一次遍历中不断的比较和交换, 把比基数小的数字都交换到基数的左部, 比基数大的都交换到右部, 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 最好最坏时间复杂度: 最好: 快速排序最“快”的地方在于左右两边能够快速同时递归排序下去,所以最优的情况是基准值刚好取在无序区的中间,这样能够...原创 2019-05-28 21:20:10 · 167 阅读 · 0 评论