时间久了,有些遗忘,回顾记录一下: 快速排序: 顾名思义,对于c++,快速排序历史上一直是实践中已知最快的泛型排序算法,平均运行时间:O(n*logn),最差就是O(n^2)。 STL中的sort用的就是快排,只不过根据数据量级穿插了别的如插入排序,堆排等算法,进行动态调整,使性能达到最优解。一般来 ...
分类:
其他好文 时间:
2020-06-12 14:55:40
阅读次数:
58
堆排序 堆排序的思想是先调用堆的inset方法,再调用堆的remove方法输出。 实现 for (i = 0; i < size; i++) heap.insert(array[i]); for (i = 0; i < size; i++) array[i] = heap.remove(); 效率 ...
分类:
编程语言 时间:
2020-06-12 01:13:05
阅读次数:
59
// 插入排序 const insertSort =(arr) => { //假设前面的元素有序,把后一个元素插入合适的位置 for (var i = 1;i<arr.length;i++){ var preIdx = i-1 var currentVal = arr[i] while(preIdx ...
分类:
编程语言 时间:
2020-06-11 19:48:53
阅读次数:
52
【模板】快速排序 #include <iostream> using namespace std; const int N = 1e5 + 10; int a[N]; void qsort(int l, int r) { if(l >= r) return; //边界边界,莫要忘了 int i = ...
分类:
编程语言 时间:
2020-06-09 18:25:49
阅读次数:
76
快速排序有多种实现方式,最容易理解得是:分治 + 迭代,只需要四步: 在数列之中,任意选择一个元素作为基准或比较值 数列中其他所有元素都和这个基准值进行比较:小的移到基准值的左边,大的移到基准值的右边 以基准值左右两边的子列作为新数列,进行递归排序,直到所有分区内最多一个元素为止 分解完成再一层一层 ...
分类:
编程语言 时间:
2020-06-09 16:19:34
阅读次数:
60
排序、去重与离散化 1. 排序 1.1 快速排序 1. 快速排序 #include <bits/stdc++.h> using namespace std; const int N = 1000010; int q[N]; void quick_sort(int q[], int l, int r) ...
分类:
编程语言 时间:
2020-06-08 11:03:33
阅读次数:
68
快速选择 用于求解 Kth Element 问题,也就是第 K 个元素的问题。 可以使用快速排序的 partition() 分治进行实现。需要先打乱数组,否则最坏情况下时间复杂度为 O(N2)。 关于快速排序: https://blog.csdn.net/nrsc272420199/article/ ...
分类:
编程语言 时间:
2020-06-08 00:43:41
阅读次数:
102
快速排序的相关资料网上有很多,基本的思路也比较简单:找一个基准值,将元素分成两部分,然后递归继续。 其中一直困扰我的一个点就是将元素分成两部分的问题,大部分文章都只讲方法,或者演示方法,但说实话我有点懵,因为我并没有搞清楚为什么这样那样做就能将元素调整为两部分,只是勉强记住了方法。 最近又碰到了这个 ...
分类:
编程语言 时间:
2020-06-07 18:00:40
阅读次数:
58
我一开始看着这个题 简单的以为 本题是一个模拟外加排序 所以直接一手sort 然后喜提60分 所以我仔细研究了一下 发现每个人都只和前一个人比赛 所以排序变化仅在2人之间 所以明显归并排序的复杂度要快于快速排序 所以 可以将sort改成手写的归并排序 但是…… 我是个懒人 所以直接stable_so ...
分类:
其他好文 时间:
2020-06-06 21:22:07
阅读次数:
54
快速排序模板(C语言) 快排的基本思想是,通过一趟排序将要排序的数据分割成独立的两部分,其中的一部分数据比另一部分的数据都要小,或者都要大,然后再把这两个独立的部分进行快速排序,整个过程可以用递归来进行。 #include<stdio.h> void quicksort(int a[], int l ...
分类:
编程语言 时间:
2020-06-06 21:19:20
阅读次数:
74