基本算法
tianhaobing
这个作者很懒,什么都没留下…
展开
-
插入排序讲解
插入排序思路插入排序的基本思想是:每次将一个待排序的元素,按照其关键字大小插入到已经排好的字表中的和合适位置,知道全部的元素插入完成为止。插入排序种类: 基本的插入排序主要分为两种,一种是直接插入排序,一种为折半插入排序,下面将使用C语言讲解两种插入排序实现的思路和算法。 1.直接插入排序:假设待排序的元素存放在数组R[0..n-1],中,排序过程中的某一时刻,R被划分成两个子区间R[0..原创 2017-03-16 23:12:05 · 491 阅读 · 0 评论 -
排序算法之交换排序
交换排基本思想:两两比较待排序元素的关键字,发现两个元素的次序相反时即进行交换,知道没有反序的元素为止。本节介绍两种交换排序,即冒泡排序和快速排序。 冒泡排序:每次只能和相邻的位置数进行交换,效率低#include<stdio.h>int a[100];void quickSort(int left,int right);//假设按照递增输出void maopaoSort(int a[10原创 2017-03-18 16:39:04 · 1750 阅读 · 0 评论 -
二分查找算法
二分查找 时间限制:C/C++语言 1000MS;其他语言 3000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 请写一个二分查找算法查找一个数最先出现的index,如果数不在集合中需要返回(-1)-当前数应该出现的位置。例如 [1,3,6],查找5,5应该是在index=2的位置但并不在集合中。返回(-1)-2 = -3。 输入 第一行读入一个原创 2017-03-19 16:45:35 · 481 阅读 · 0 评论 -
最短路径之Floyd-Warshall
最短路径之Floyd-Warshall1.算法思路:若要求两个点的最短路径,可以通过引入第三个点来间接到目的地,若距离缩短了,那么我们可以继续找第四个点…知道所有的点找完了即是最短距离。假设我们点与点的距离如下图: 由图可知,4->3的距离为12,假设我们通过1这个顶点来中转,这时,4->3的距离就缩短为4->1->3,共11。而如果通过1和2来中转的话,4->3就缩短为10(a[4][1]原创 2017-03-19 19:39:12 · 585 阅读 · 0 评论 -
最通俗易懂的背包问题
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢! —-第一节—-初识动态规划——– 经典原创 2017-03-21 00:33:06 · 8447 阅读 · 2 评论 -
排列与组合的JAVA通用算法
排列算法1.例如,输入n,求1-n的全排列。一共有n*(n-1)*(n-2)…*1种排列(n个数两两不相同)//采用递归地方式实现,就是回朔法public class Rank { private static Set<Integer>set=new HashSet<Integer>();//用于判断数字是否已经用过 private static int n=0;//输入的n,求1原创 2017-07-30 00:47:01 · 776 阅读 · 0 评论 -
最短路径之Dijkstra算法
最短路径之Dijkstra算法(看到i,j,k三个变量可以理解为需要三个for循环,方便记忆)本节来学习指定一个点(源点)到其余各个顶点的最短路径,也称为”单源最短路径”。与上篇的Floyed-Warshall算法一样,这里仍然使用二维数组a来存储顶点之间边的关系。如图:(假设我要求的是1号顶点到其余顶点的最短距离) 当然,我们还需要一个dis数组来存储1号顶点到其余顶点的当前距离,如图:原创 2017-03-23 14:07:18 · 15349 阅读 · 10 评论 -
快速幂算法和大整数求模
** 1.快速幂的算法**(1)当我们求一个数的n次方的的结果时,若直接选择for循环,来累乘的话,效率很低,时间复杂度位O(n),而当我们选择快速幂来计 算时,时间复杂度能达到O(logn),快了很多。快速幂的基本方法基于二进制,将n次方分解,每次计算平方。如下: 假设我们要求5^23(5的23次方),因为23换为二进制为:10111。即2^4*1+2^3*0+2^2*1+2^1*1+2^0*原创 2017-07-24 16:14:53 · 5006 阅读 · 0 评论