摘要: 快速排序由C. A. R. Hoare在1962年提出。 它的基本思想是: 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序是一种交换类 阅读全文
posted @ 2018-02-28 19:24 月亮茶 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 1.归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治策略 2.归并排序是稳定排序 3.归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。 例子: 注:逆序对在代码标注中 关于归并排序求逆序对原理,请自行百度 1 #include<iostream> 2 #include<algo 阅读全文
posted @ 2018-02-28 18:10 月亮茶 阅读(4201) 评论(0) 推荐(3) 编辑
摘要: 堆排序: 利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 (不知道堆的,自行百度) 堆排序的基本思路: a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆; b.将堆顶元素与末尾元素交换,将最大元素"沉 阅读全文
posted @ 2018-02-28 17:05 月亮茶 阅读(198) 评论(0) 推荐(0) 编辑
摘要: f[i][j]表示从位置i开始,长度为2^j的一段区间的最值 以最小值为例: 原理:意会 加油! 阅读全文
posted @ 2018-02-28 15:14 月亮茶 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 插入排序基本思想: 每一步将一个待排序的数,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。 例子: 1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 int a[120000],n; 5 int main( 阅读全文
posted @ 2018-02-28 14:40 月亮茶 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序的基本思想是: 对相邻的元素进行两两比较,顺序相反则进行交换。 这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 #include<cstdio> #include<algorithm> using namespace std; int a[120000],n; int mai 阅读全文
posted @ 2018-02-28 14:32 月亮茶 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 简单选择排序 是最简单直观的一种算法,基本思想: 每一趟从待排序的数据元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。 简单选择排序是不稳定排序。 在算法实现时,每一趟确定最小元素的时候会通过不断地比较交换来使得首位置为当前最小,交换是个比较耗时的操作。 其实我们很容易发现,在还 阅读全文
posted @ 2018-02-28 14:20 月亮茶 阅读(149) 评论(0) 推荐(0) 编辑