用下`nth_element`逃课,不熟的话在快排的基础上改下随机选择算法也是一样的 ...
分类:
其他好文 时间:
2020-07-03 17:15:27
阅读次数:
58
后续更新双端快排,以及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
核心:对于增序,目标值target左边元素的值都小于target,右边元素的值都大于target,然后使用递归的方式使得每一位元素都有序 def quicksort(nums:List[int], left:int, right:int): if left < right: # 为了方便,一般以左边 ...
分类:
编程语言 时间:
2020-07-02 18:21:00
阅读次数:
45
快排的划分,归并排序的归并,之后的kmp都是双指针算法。 双指针算法的两大类: 指向两个区间或指向一个区间 双指针算法一般是这样的 双指针算法运用了某些单调性质,可以将暴力的O(n^2)优化到O(n) 先来一个小的问题热身,输入一行若干个用空格隔开的单词,然后依次每行输出一个单词。具体应用看这里ht ...
分类:
其他好文 时间:
2020-06-30 10:56:43
阅读次数:
44
题目 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k = 4 输出: 4 解法 ...
分类:
编程语言 时间:
2020-06-29 15:20:08
阅读次数:
66
快速排序 快排的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。 百度百科给的算法: 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作 ...
分类:
编程语言 时间:
2020-06-29 09:28:36
阅读次数:
67
一、归并排序 要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起。如下图: 重点: 归并排序使用的是分治思想。分治,就是分而治之,将一个大问题分解成小的子问题来解决。 分治思想跟递归思想很像,分治算法一般是用递归实现。 分治是一种解决问题的处理思想, ...
分类:
编程语言 时间:
2020-06-21 23:38:44
阅读次数:
74
快排(双指针): void quick_sort(int q[],int l,int r) { if(l>=r)return ; int i=l-1,j=r+1,x=q[(l+r)>>1]; while(i<j) { do i++;while(q[i]<x); do j--;while(q[j]>x ...
分类:
编程语言 时间:
2020-06-18 21:11:23
阅读次数:
66
如题,快速排序其实很简单,可以理解为进阶版的“数组选定界限分大小” 我把整个快排分为了两个函数,这样也更直观的了解算法流程,后期有时间再来讲解 学习快速排序可以看两个视频: 天勤 第二章:线性表划分 8分钟讲解快速排序 int partition(int a[],int left,int right ...
分类:
编程语言 时间:
2020-06-17 18:39:21
阅读次数:
76