![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 61
CS_蟹蟹
这个作者很懒,什么都没留下…
展开
-
最大公约数--欧几里得算法
欧几里得辗转相除求最大公约数:设gcd(a,b)求的是ab的最大公约数,设a>b,可以证明gcd(a,b)=gcd(b,a%b),证明过程略。设r=a%b,把gcd(a,b)变为gcd(b,r),再进行辗转相除变为gcd(r,b%r),计算量明显减轻转载 2014-01-26 00:08:33 · 527 阅读 · 0 评论 -
堆排序(TOP K)
堆的定义,它是一个完全二叉树,存储结构为数组。给出一个数组之后,可以认为这个初始堆是按照结点序号从小到大存放的。满足对的定义要求,所有父结点的键值都要不小于(或者不大于)子结点的键值,称为大顶堆(小顶堆)。对堆的操作有插入、删除,这些操作都要对堆进行一定的调整以保证堆的定义。堆的插入直接放在堆最后一个位置,同时从此位置开始向上调整,向上调整的代码:void MinHeapFixup原创 2014-02-07 14:23:03 · 796 阅读 · 0 评论 -
筛选法求100以内素数
范围确定时,可以通过筛选法筛选出素数。一个标记数组a[N],下标i为数,a[i]为0表示i不是素数,为1表示目前还没被筛选出来。从2的倍数开始直到sqrt(N)的倍数,一一从素数中删除,留到最后的就是素数#include#include#include#define N 101//筛选法求100以内的素数int main(){ int i,j,a[N]; int sqrt_原创 2015-06-06 22:39:42 · 1196 阅读 · 0 评论 -
迭代
求斐波那契数列:#includeint main(){ int a,b,c; a=1; b=2; int n; scanf("%d",&n); for(i=3;i<=n;i++) { c=a+b; a=b; b=c; } printf("%d",c);}这个方法属于迭代,比用递归求斐波那契快些普通递归:#includeint febo(i原创 2015-04-12 00:24:44 · 496 阅读 · 0 评论 -
毕设进程:公交换乘算法
这个最开始是在i一个论文上看到的,是Dijs原创 2014-05-30 18:00:00 · 1365 阅读 · 1 评论 -
数列的逆序数对微软面试题
题目:求一个数组中的逆序数对的个数。eg{2,4,3,1},2,1为一个逆序数对,4,3;4,1;3,1共4对;一种比较直接的做法,就是遍历n次,每次把数组中剩下的数遍历完。代码如下:/**********************************************Date:2014.02.07*Function:逆序数组的个数* eg.{2,4,转载 2014-02-09 12:15:40 · 816 阅读 · 0 评论 -
归并排序
归并排序,在直接手动操作排序时:先将待排序的序列按序两个1合成一个2,两两一组,如果最后剩下一个单独的,则它自己独为一组,组内两数据比较排序;再将两个2合成一个4,继续在组内排序,不够两组2的单独为组,不用进行排序了;这样下去,知道最后将所有数合成一组,最后排序一次得到有序序列;这里在对两个x合成一个2x时,使用的方法是我们常见的,将两个有序数组合成一个有序数组的方法。这个原创 2014-02-05 12:53:59 · 532 阅读 · 0 评论 -
直接选择排序
不同于直接插入排序转载 2014-02-03 17:23:50 · 475 阅读 · 0 评论 -
快速排序
快排的思想:1)先挖出一个坑,将其值保存到key,i,j分别指向待排序的队列首位。2)从高位想低位找第一个小于key的值,用其值填第一个坑。即a[i]=a[j](i为待排序首位)。3)从低位向高位找第一个大于key的值,用其值填上一个坑。上一个坑的位置就是j,即a[j]=a[i]。4)重复2、3直到 i=j,此时key的位置确定下来了,即在i(j)处,a[i]=key即可5)上转载 2014-02-02 23:17:45 · 489 阅读 · 0 评论 -
直接排序
直接排序,先保证前面2个数升序,在插入后面一个数,这个数的插入只需向前需找到第一个小于自己的数,插在前面即可版本1:先找位置,在将其后的数据依次后移,需要3个变量ijk//版本1,需要ijk三个变量:void in_sort(int a[],int n){ int temp; for(int i=1;i<n;i++) { temp=a[i]; for(int j=i-1;转载 2014-01-29 23:30:09 · 505 阅读 · 0 评论 -
冒泡排序的三种实现方法
待整理转载 2014-01-29 17:33:19 · 524 阅读 · 0 评论 -
BST的生成,后续输出
#include#include#includetypedef struct BiNode{ int data; struct BiNode * lchild; struct BiNode * rchild;}BiNode,*Bitree;//二叉树节点的定义Bitree Create_BST(int a[],int n){ int i; Bitree root,p,q原创 2014-01-29 19:50:09 · 618 阅读 · 0 评论 -
荷兰国旗
首先是将数组整理成负数在前,正数在后思想:一次快排,标杆选为第一个数,确定其最终位置即可void negtive_front(int a[],int n){ int temp=a[0]; int i=0,j=n-1; while(i<j) { while(a[j]>=0&&i<j) { j--; } if(i<j) { a[i]=a[j];原创 2015-06-08 22:37:48 · 480 阅读 · 0 评论