排序
君莫笑(๑˙ー˙๑)
欢迎互关,一起学习,共同进步
展开
-
冒泡排序及两步优化
思路数组长度为 n,每一轮将一个最大的数放到最右边,最后剩一个数不用排,n-1 轮就能排好。第 i 轮需要排 n - i -1 次。代码public class BubbleSort{ public static void bubbleSort(int[] arr) { for (int i = 0; i < arr.length; i++) { ...原创 2019-10-06 17:13:54 · 258 阅读 · 0 评论 -
选择排序
选择排序思路代码复杂度分析时间复杂度空间复杂读稳定性分析思路第 i 轮从第 i 个数后面选择一个最小的数与第 i 个数交换。需要 n - 1轮,第 i 轮比较 n - i -1 次。代码public class SelectionSort{ public static void selectionSort(int[] arr){ for(int i = 0; i &...原创 2019-10-06 17:39:04 · 97 阅读 · 0 评论 -
插入排序
插入排序思路代码复杂度分析时间复杂度空间复杂读稳定性分析思路第 i 轮,有序范围为 0 ~ i - 1,选择索引为 i 的数插入到前面合适的位置,使有序范围为 0 ~ i。需要 i - 1轮。每一轮记录当前 i 的值,将前面比 i 的值大的,往后复制一位。发现比 i 的值小或等于的,将后面一个数和 i 的值交换。代码public class InsertSort{ public ...原创 2019-10-06 18:12:00 · 92 阅读 · 0 评论 -
希尔排序
希尔排序思路代码复杂度分析时间复杂度空间复杂读稳定性分析思路插入排序适合大部分数有序。希尔排序为多轮等跨度插入排序。第一轮等跨度插入排序的跨度为 n/2,有 n/2 次插入排序。后面每轮跨度缩小到原来的一半。代码public class ShellSort{ public static void shellSort(int[] arr) { int d = arr....原创 2019-10-06 19:12:38 · 187 阅读 · 0 评论 -
快速排序
快速排序思路代码填坑法指针交换法复杂度分析时间复杂度空间复杂读稳定性分析思路利用分治的思想,每次选择一个 pivot,将小于 pivot 的数放在左边,大于 pivot 的数放在右边。左右两边再分别选择一个 pivot。代码填坑法public class QuickSort{ public static void quickSort(int[] arr) { qu...原创 2019-10-06 20:45:40 · 137 阅读 · 0 评论 -
堆排序
堆排序思路代码复杂度分析时间复杂度空间复杂度稳定性分析优势适用场景思路将数组看成二叉堆,如果是从小到大排序,先下沉为最大堆。再将堆顶的数(最大的数)逐轮与最后一个数交换并不将它纳入堆中,然后下沉。这样一来,每轮都能在数组最后得到这轮中最大的数。代码public class HeapSort{ public static void heapSort(int[] arr) { ...原创 2019-10-06 22:59:00 · 115 阅读 · 0 评论 -
计数排序
计数排序思路代码复杂度分析时间复杂度空间复杂度稳定性分析优势适用场景思路1.遍历原始数组 arr 找到最大值和最小值,确定计数数组 countArr 的范围2.遍历 arr 并计数于 countArr3.对 countArr 做调整,每个数等于前面的数之和4.反向遍历 arr,对应 countArr 中的数减 1,就是 sortedArr 中的位置代码public class Cou...原创 2019-10-07 09:37:11 · 118 阅读 · 0 评论 -
桶排序
桶排序思路代码复杂度分析时间复杂度空间复杂度稳定性分析优势适用场景思路非整形的计数排序,将数放到桶内,先将桶内排序,再整体排序。k 个桶,最后一个桶用来放最大值,只有 k - 1 个跨度,这 k - 1 个跨度对应 k - 1 个桶。所以跨度为 (max - min)/(k - 1)数对应的桶的下标为 (int)(arr[i] - min)/跨度1.遍历原始数组 arr 找到最大值和最...原创 2019-10-07 11:09:02 · 152 阅读 · 0 评论 -
归并排序
归并排序思路代码复杂度分析时间复杂度空间复杂度稳定性分析优势适用场景思路将数组对半分到长度为 1 为止,再逆向合并,合并的过程中进行排序。将轮数减少到了 logn。代码public class MergeSort{ public static void mergeSort(int[] arr){ mergeSort(arr, 0, arr.length - 1);...原创 2019-10-08 11:05:01 · 175 阅读 · 0 评论 -
拓扑排序
目录适用场景前提思路代码适用场景将图里的定点按照相连的性质进行排序排序结果应为:1 2 4 3 5前提必须是有向无环图思路不断找一个入度为 0 的点,放入结果集,再删除节点(更新入度表)。代码public class TopologicalSort { public static List<Integer> sort(boolean[][] adj, int[] indegree){ List<Integer> ans = new Link原创 2020-08-12 15:47:37 · 468 阅读 · 0 评论