
数据结构与算法
数据结构
qq_45239139
这个作者很懒,什么都没留下…
展开
-
快速排序的优化
(1)普通的快速排序每次找到数组中一个固定的值作为基准值(一般选举最左端或者最右端),然后采用双指针,左部分小于基准值的直接指针++,右部分大于基准值的直接指针–,直到不满足条件停下来,然后交换两者指针指向的数据,这样一趟排序下来,按照基准值所在位置的左边都是小于它的,基准值的右边都是大于它的,也就是将原本的数组分为了两个子数组,然后继续递归在子数组中排序递归版本普通快速排序:public static void quickSort(int[] array) { quickSortHe原创 2020-07-06 11:07:37 · 121 阅读 · 0 评论 -
Java排序-基数排序
基数排序又称为“桶子法”,用空间来换取时间,获得排序的高效率代码和具体理解如下:private static void cardinalSort(int[] array) { int location = 1; int max = 0; // 找出数组中的最大值,最大值有几位数,就有几次循环排序 for (int i = 0; i < ar...原创 2020-04-01 14:36:53 · 123 阅读 · 0 评论 -
LeetCode:976.三角形的最大周长
题目:给定由一些正数(代表长度)组成的数组 A,返回由其中三个长度组成的、面积不为零的三角形的最大周长。如果不能形成任何面积不为零的三角形,返回 0。 示例 1:输入:[2,1,2]输出:5示例 2:输入:[1,2,1]输出:0示例 3:输入:[3,2,3,4]输出:10示例 4:输入:[3,6,2,3]输出:8源码:class Solution...原创 2019-12-10 15:21:00 · 197 阅读 · 0 评论 -
java.合并排序
原理:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子 序列段间有序。若将两个有序表合并成一个有序表,称为二路归并时间复杂度 O(NlogN)空间复杂度 O(N)稳定性:稳定源码: // 合并排序 p...原创 2019-11-17 21:00:55 · 335 阅读 · 0 评论 -
java.快速排序
原理:从待排序区间选择一个数,作为基准值(pivot); 例如取数组最后一个元素作为基准值Partition: 遍历整个待排序区间,从前往后遍历将比基准值小的(可以包含相等的)放到基准值的左边,从将比基准值大的(可 以包含相等的)放到基准值的右边;采用分治思想,对左右两个小区间按照同样的方式处理,直到小区间的长度 == 1,代表已经有序,或者小区间 的长度 == 0,代表没有数据。快速...原创 2019-11-17 20:56:30 · 98 阅读 · 0 评论 -
java.冒泡排序
最好情况下时间复杂度:O(n)平均情况下时间复杂度:O(n^2)最坏情况下时间复杂度:O(n^2)空间复杂度:O(1)稳定性:稳定 // 冒泡排序 public static void bubbleSort(int[] array) { for (int bound = 0; bound < array.length; bound ++) { ...原创 2019-11-17 20:46:48 · 98 阅读 · 0 评论 -
java.堆排序
堆:1.完全二叉树2.使用线性方式存储的(下标之间存在一些关联)3.任何一个子树之中,父节点都比子节点大(大堆的情况下)堆排序思路和直接选择排序很像每次取出一个最大值,放到数组最后实现堆排序的步骤:1.先针对整个数组建堆2.把堆顶元素放到数组最后3.重新调整堆堆排序的复杂度:O(NlogN)堆排序的空间复杂度:O(1)稳定性:不稳定源码: // 堆排序 p...原创 2019-11-17 20:37:04 · 113 阅读 · 0 评论 -
java.直接选择排序
每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据元素 排完 。源码:import com.sun.org.apache.xpath.internal.SourceTree;import java.util.Arrays;public class SortDemo { // 选择排序 public static void ...原创 2019-11-13 17:30:09 · 126 阅读 · 0 评论 -
java.希尔排序
希尔排序是插入排序的升级版本,它是按照插入排序的两个重要特性来进行改进的希尔排序步骤:(1)先将整个数组分成若干组,将这每个组进行插入排序,这个分成多少个组需要依靠我们提前定义一个 gap 来决定,一般 gap 都是按照数组长度的一般进行定义,gap 最小为 1(2)再接着将组分成 gap / 2 个组(3)最后进行一次插入排序源码: public static void s...原创 2019-11-13 16:54:50 · 88 阅读 · 0 评论 -
java.插入排序
整个区间被分为有序区间无序区间每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入源码:package package1112;import com.sun.org.apache.xpath.internal.SourceTree;import java.util.Arrays;public class SortDemo { public static v...原创 2019-11-12 22:31:06 · 103 阅读 · 0 评论