算法
文章平均质量分 84
fkdo
这个作者很懒,什么都没留下…
展开
-
排序算法(二)
基数排序原理 参考 对每一个数字,先按个位进行排序(个位相同的放在一起,不需要排序),再按十位进行排序,直到最高位。如果某个数字的位数较少,则该位数按0处理。如(11,1)按十位排序时,把1的十位当作0处理。 在处理时,可以将该位上相同的数字按链表进行处理。类似于Java中HashMap的数组结果。如[10,100,1000,301]按原创 2016-05-16 13:46:26 · 344 阅读 · 0 评论 -
排序方法(一)
参考 参考冒泡排序原理 比较相邻两个元素的大小,进行调整位置。代码 略。快速排序原理 通过一次排序将数据分成两个独立的部分,再分别对两部分进行排序,直到结束。代码void quicksort(int a[],int left,int right){ if(right <= left){原创 2016-05-14 23:16:10 · 294 阅读 · 0 评论 -
栈与队列
栈基础 栈后进先出的一种数据结构。可以用链表来实现,只需要将新插入的元素插到表头,然后将链表的指针更新到最新的位置即可。 取的时候,从链表的指针开始,这样就保证了后进先出。 使用链表形式实现栈时,不需要一个单独的指针用来存储栈底与栈顶,只需要记录栈顶元素的地址即可。每一次插入都将新元素的next属性设置为原来的栈顶,而新栈顶为新插入的元素。原创 2016-05-20 14:25:03 · 387 阅读 · 0 评论 -
快速幂
试题 求a^b的后三位数。a,b是整数。 这题也就是计算a^b%1000的值。解法一 先求出a^b的值,然后计算a^b%m即可。 如果a,b足够大,那么a^b将无法计算出来。所以解法一只适用于a,b都很小的情况。解法二 解法二会利用如下公式进行计算:其证明过程如下:因此a^b%原创 2017-02-19 17:23:54 · 17498 阅读 · 6 评论 -
排序算法的应用
使用堆排序求前k个最大(小)数原理 假设序列中有n个元素,取其前k个组成一个最大堆。由于最大堆的堆顶为序列中最大元素,所以组成的最大堆的堆顶是前k个元素中最大的元素。依次用第k+1到第n个元素与堆顶进行比较,如果比堆顶元素大,那么该元素肯定不会是前K个最小的元素;如果比堆顶小,那么堆顶的元素肯定不是前k个最小的元素,此时更新堆顶元素,并重新计算使新堆成为最大堆。依次进行,直到原创 2016-05-17 17:55:22 · 313 阅读 · 0 评论 -
KMP字符串匹配
思路 判断s中是否含有字符串t。 一般思路为:从s中首字符开始,依次与t中进行比对,直到t结尾或者某一个位置两者不同 。如果到t的结尾,则表示s中含有t。如果有一个位置不相同,那么从s中下一个字符开始,再次与t中字符比对。如下: i = 0,j = 0; for(;i<pl;i++){//pl为p字符串的长度,依次遍历它的每一个字符串原创 2016-05-23 22:59:55 · 289 阅读 · 0 评论