排序算法几乎是最为常见的算法,其目的是将一串不规则的数据按照递增递减的方式重新排列。 ...
分类:
编程语言 时间:
2020-07-03 19:10:13
阅读次数:
63
书本上只介绍到堆排序,无细讲堆,翻烂 📘掘金,找到一篇不错的图文介绍(https://juejin.im/post/5ec25b156fb9a0435a01e52e) 1. 堆 二叉树可以被细分为普通二叉树、满二叉树、完全二叉树,而今天所分享的堆这种数据结构就是一种完全二叉树。 堆中的每个结点的值 ...
分类:
其他好文 时间:
2020-07-03 12:14:54
阅读次数:
54
后续更新双端快排,以及Arrays.sort()中的三路快排。 public void quickSort(int[] num,int start,int end){ if (start>=end){ return; } int i = start; int j = end; while(i<j){ ...
分类:
编程语言 时间:
2020-07-02 19:50:59
阅读次数:
52
快速排序 分治 ①确定分界点:q[l],q[(l+r)/2],q[r] ②调整范围 ③递归处理左右两段 #include<iostream> using namespace std; const int N = 1e5+10; int n; int a[N]; void quick_sort(int ...
分类:
编程语言 时间:
2020-07-02 11:55:45
阅读次数:
58
稳定性:不稳定排序 1. 过程介绍 快速排序是考察次数最多的排序,无论是在大学专业课的期末考试,还是在公司的面试测试题目中,快速排序都极大的被使用,在实际中快速排序也极大的被使用,如STL中的sort底层就是一个快速排序。 首先在数组中选择一个基准点,然后分别从数组的两端扫描数组,设两个指示标志(l ...
分类:
编程语言 时间:
2020-07-01 16:03:45
阅读次数:
68
基本原理堆排序的基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。大致过程:1.建堆(这里是以建大顶堆为例)先把数组中的数转换成二叉树的形式,在这个基础上建堆。这里用到的大顶堆的性质:所有父节点的值要大于其子节点的值。按照这个性质,将无序的二叉树调整成堆。父节点和子节点计算:如图是一个简易的二叉树,蓝色的数字为节点的序号。计算父节点的序号要根据
分类:
编程语言 时间:
2020-07-01 09:19:44
阅读次数:
46
本博客总结学习堆排序算法,以一个数组为例,采用大根堆进行升序排序,附有代码实现。 堆排序的思想 堆排序的逻辑是建立在完全二叉树的基础上。 有两个概念必须要了解: 大根堆:每个结点值都大于等于左右孩子结点值 小根堆:每个结点值都小于等于左右孩子结点值 以大根堆为例,将根结点与最后一个结点交换,弹出根结 ...
分类:
编程语言 时间:
2020-06-30 13:03:10
阅读次数:
63
快速排序 快排的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。 百度百科给的算法: 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作 ...
分类:
编程语言 时间:
2020-06-29 09:28:36
阅读次数:
67
对一个数组按照快速排序方式排序: public class Solution { public int[] sortArray(int[] nums) { int len = nums.length; quickSort(nums, 0, len - 1); return nums; } priva ...
分类:
编程语言 时间:
2020-06-28 18:16:07
阅读次数:
61