一、分治算法 分而治之,即把原问题分割成同等结构的子问题,之后针对子问题逐一解决。 插入排序更关心的是治。 归并排序更关心的是分,如何均匀分的问题。 二、分治算法应用 求逆序数 1. 什么是逆序数? 排在前面的元素比后面大。例如:序列 3 5 6 8 1 ;8排在1前面,但是8 > 1。逆序数反映的 ...
分类:
编程语言 时间:
2020-02-15 21:45:56
阅读次数:
86
归并排序分治法的一个典型且基本的应用。它的基本思想是:将对N个对象的问题转换成两次对N/2个对象的问题。归并排序减少了数据的比较次数,转而增加了数据的移动次数,使得排序速度相对较快。该算法的递推公式T(N) = 2T(N/2) + O(N)表明其算法复杂度上限为O(NlogN)。下面是其C++代码: ...
分类:
编程语言 时间:
2020-02-15 11:29:41
阅读次数:
74
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种 ...
分类:
编程语言 时间:
2020-02-14 16:05:57
阅读次数:
99
本文始发于个人公众号: TechFlow ,原创不易,求个关注 在之前介绍线性代数行列式计算公式的时候,我们曾经介绍过逆序数:我们在列举出行列式的每一项之后,需要通过逆序数来确定这一项符号的正负性。如果有忘记的同学可以回到之前的文章当中复习一下: "线性代数行列式" 如果忘记呢,问题也不大,这个概念 ...
分类:
编程语言 时间:
2020-02-13 10:05:22
阅读次数:
71
#堆排序#基本思想:1.将初始待排序数字列表(R1,R2,...,Rn)构建成大顶堆,此堆为初始的无序列表# 2.将堆顶元素R1与最后一个元素Rn交换,此时得到新的无序列表(R1,R2,...,Rn-1)和新的有序列表(Rn)# 3.由于交换后新的堆顶R1可能违反堆的性质,因此需要对当前无序列表(R ...
分类:
编程语言 时间:
2020-02-12 21:57:43
阅读次数:
72
tips: 1.注意边界处理,避免出现死循环 785. 快速排序 /* eg:2 1 2 用i则不能取到左边界,把x取值改成向上取整 用j则不能取到右边界,把x取值改成向下取整 取到边界会导致递归死循环 */ #include<iostream> #include<cstdio> using nam ...
分类:
其他好文 时间:
2020-02-12 21:57:31
阅读次数:
71
/* 结点i的左儿子是2i,右儿子是2i+1 那么显然这是一棵完全二叉树。 由于没有很好直接查询的办法,所以先考虑预处理一下这棵树 根据完全二叉树的性质,sum{size[i]}<=nlogn,所以直接用vector存下结点的所有孩子,自底向上对到子树距离归并排序 这样预处理完后,对于每个询问(A, ...
分类:
编程语言 时间:
2020-02-12 16:52:16
阅读次数:
94
学习自菜鸟教程,自己加以总结希望可以多多重复!!! 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归并排序 堆排序 基数排序 1 //冒泡排序 O(n2) 2 public static void BubbleSort(int[] arr){ 3 int temp; 4 for(int i=0; ...
分类:
编程语言 时间:
2020-02-12 14:53:26
阅读次数:
78
结构体模板 1 struct STU 2 { 3 string name; //用string可以代替char 4 string num; 5 int s; 6 }; sort是用快速排序实现的,属于不稳定排序,stable_sort是用归并排序实现的,因此是稳定的。从此以后,为了保险起见我打算使用 ...
分类:
编程语言 时间:
2020-02-12 00:16:40
阅读次数:
112
二叉树的递归遍历很容易写出来,对于递归遍历则需要借助辅助栈,并且不同的遍历次序迭代的写法也不尽相同,这里整理一些二叉树迭代遍历的实现 二叉树的前序遍历 [leetcode144]:https://leetcode cn.com/problems/binary tree preorder traver ...
分类:
其他好文 时间:
2020-02-11 00:35:37
阅读次数:
73