![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
空城不空99
耐得住寂寞,守得住繁华!
展开
-
堆排序Heap Sort(其一)
堆排序Heap Sort 时间复杂度: O(nlogn) 二叉堆 Binary Heap:堆总是一颗完全二叉树 最大堆(大顶堆): 堆中每个节点的值总是不大于其父节点的值。 用数组存储二叉堆: 索引从1开始时,某个节点i的父节点为parent(i)=i/2,其左孩子为left child(i)=2i,其右孩子为right child(i)=2i+1. 大顶堆中插入元素:Shift Up 大顶堆我...原创 2020-04-14 16:39:03 · 102 阅读 · 0 评论 -
归并排序Merge Sort(其二)自底向上
归并排序Merge Sort(其二)自底向上 基本思想: 从左到右把数组划分成几个小段,两个元素一小段,然后进行归并排序的过程,当归并排序完一轮后,再四个元素一小段的进行归并排序,以此进行下去直至n个元素一小段时整个数组有序。 注: 在这个过程中我们不需要递归,只需要迭代就可以完成归并排序。 /** * 自底向上的归并排序,无需递归,只需迭代 * @param arr ...原创 2020-04-12 19:56:00 · 266 阅读 · 0 评论 -
归并排序Merge Sort(其一)自顶向下的递归实现
归并排序Merge Sort(其一)自顶向下的递归实现 归并排序 : 使用递归实现自顶向下的归并排序 时间复杂度 : O(NlogN) 空间复杂度 ????(N) 关键:对于两个已经排好序的子数组,怎么进行归并排序使其成为一个有序的数组。 (设置三个索引,需要定义清楚k;i,j(维护这个定义)) left , middle, right 具体步骤: /** * 归并排序 ...原创 2020-04-12 18:00:15 · 309 阅读 · 0 评论 -
插入排序Insertion Sort
插入排序Insertion Sort 时间复杂度:O(n^2) 每次都与它前一个位置的元素作比较,如果小于它前一个位置的元素就做交换。 /** * 每次比较都进行交换,消耗时间长 * @param arr * @param n */ public void insertSort(E[] arr, int n){ for(int i =...原创 2020-04-11 19:47:03 · 93 阅读 · 0 评论 -
选择排序Selection Sort
选择排序Selection Sort 时间复杂度:O(n^2) 1、时间复杂度为O(n^2)的排序算法编码简单,是一些简单场景的首选,在一些特殊的情况下,简单的排序算法更有效。 2、简单的排序算法可以衍生出复杂的排序算法。 3、简单的排序算法可以作为子过程,改进更复杂的排序算法。 选择排序思想: 每次都选择待排序中最小的与当前位置进行交换。 两层循环,外层循环控制当前要排序的元素位置,内循环找到待...原创 2020-04-11 17:59:44 · 84 阅读 · 0 评论 -
快速排序Quick Sort(其三)-三路快排
快速排序Quick Sort(其三)-三路快排 存在的问题: 之前的排序都没有考虑等于arr[l]的问题,只是把数组分成小于arr[l]和大于arr[l]的两部分,而三路快速排序则是把数组分成小于arr[l],等于arr[l],大于arr[l]的三部分,这样分隔之后在递归的过程中,对于等于arr[l]的部分我们就不用了管了,只需要递归的对小于arr[l]和大于arr[l]的部分进行同样的快速排序就...原创 2020-04-10 19:38:26 · 324 阅读 · 0 评论 -
快速排序Quick Sort(其二)-二路快排
快速排序Quick Sort(其二)-二路快排 存在的问题: 当数组中存在大量重复元素时,我们的快速排序又退化为了O(n^2)。 之前的快速排序没有讨论等于arr[l]的情况,其中等于arr[l]的包含在大于等于中。 不管是将等于arr[l]放到小于arr[l]黄色的部分,还是将其放入大于arr[l]紫色的部分,当我们的数组包含大量重复元素的时候,我们这次Partition操作都有可能把这个数组...原创 2020-04-10 16:49:50 · 378 阅读 · 0 评论 -
快速排序Quick Sort(其一)
快速排序Quick Sort(其一) 基本思想: 选择一个元素,以这个元素为基点,想办法把这个元素挪到排好序应该所处的地方,它之前的元素都是小于它的,它之后的元素都是大于它的。 对小于这个元素的子数组和大于这个元素的子数组分别继续使用快速排序的思路逐渐递归下去完成整个排序过程。 快速排序的核心: 如何把一个选定的元素挪到正确的位置上,可称为Partition过程,通常使用数组中第一个元素(可随机这...原创 2020-04-10 15:23:36 · 136 阅读 · 0 评论