
排序算法
排序算法
__anonymous_
Stay hungry, stay foolish.
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
计数排序
思路 用辅助数组对数组中出现的元素进行计数(辅助数组下标值等于元素值时,辅助数组对应下标的元素值++),最终计数完后,扫描辅助数组,只要对应下标的值大于0,则把下标值从左到右回填到原数组中。 效率分析 时间复杂度:O(n + k),最好最坏情况都为O(n + k) 空间复杂度:O(k) 稳定性:稳定 适用性:计数排序可以说是最快的排序算法,当序列边界小,数值大小比较集中时此时效率高,不会浪费很多空间。 代码 public static void countSort(int[] arr) {原创 2020-07-25 20:03:53 · 190 阅读 · 5 评论 -
基数排序
一、思路 二、准备工作: 定义一个二维数组:表示有10个桶,每个桶中装着一个数组 定义一个一维数组:用来记录每个桶中存储了几个元素,指向桶的最低且为空的位置 计算出待排序的数组中元素的最大位数,该最大位数对应一共要从10个桶中来回存取几次 三、核心代码逻辑: 把原数组按照元素的数位存放在对应的桶中 再从依次从桶中取出相应元素覆盖原数组 上诉代码要循环数组中元素的最大位数这么多次 四、一些小技巧和结论 求一个数的数位大小:(数字 + "").length(),把数转为字符串然后求其长度。 求一原创 2020-07-25 18:54:40 · 102 阅读 · 0 评论 -
快速排序——三种划分方式
思路: 1.分治思想:先划分成两个问题,然后对两个子问题递归排序,最后再合并。 2.核心算法:快排的核心在于划分问题(找到分界点)。 代码: //快速排序 public static void quickSort(int[] arr, int left, int right) { if(left < right) { //此处用单指针扫描来划分(可以替换划分方法) ...原创 2020-04-20 11:58:44 · 4905 阅读 · 1 评论 -
归并排序
public class MergeSort { //建立一个辅助空间 static int[] helper = new int[1024]; //归并排序: public static void mergeSort(int[] arr, int left, int right) { if(left < right) { ...原创 2020-04-20 10:21:16 · 228 阅读 · 0 评论