
算法
文章平均质量分 73
水落0无痕
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一天一算法之选择排序
今天说说选择排序。首先和昨天写到的冒泡排序做下比较,冒泡排序是两两比较前者大就交换的排序,很可能交换的次数极多,要知道交换耗费的性能是要比比较耗费的性能高的。于是选择排序在交换的次数上进行了优化。从数组开始每次取一个数与后面的数比较,存下大数的值和索引位,在比较完一次后进行交换。交换总次数相对稳定。using System;/// /// 选择排序/// 思想是相对于冒泡来说较少交换原创 2015-10-16 18:46:42 · 454 阅读 · 0 评论 -
快速排序的递归和非递归实现
对于一个游戏爱好者和游戏开发者,数据结构和算法显得极为重要,这些可以体现一个开发者的逻辑能力。而作为一个游戏开发小白,要争取每天一个算法,游戏之路漫漫而其修远兮,吾将上下而求索。这次写个快排的递归非递归算法,小白一个,有误之处多多见谅。废话不多说直接上代码。using System.Collections.Generic;/// /// QuickSort/// 主要思路,不停找中间原创 2015-10-12 17:16:51 · 658 阅读 · 1 评论 -
各种常用的插入排序(直接,折半,希尔)
本来打算昨天发,结果竟然学了一个晚上,自认为大学数据结构学得还不错,重新翻一遍竟然看了这么久还没有理解透彻,更加坚定了我一天一算法的决心。昨天和今天的排序一块写出来一块总结道插入排序里好啦。老样子,代码走起。using System;/// /// 插入排序/// namespace test{ class MainClass { public static void M原创 2015-10-14 12:44:36 · 604 阅读 · 0 评论 -
一天一算法之冒泡排序
这几天写项目,偷点懒,写个简单的。虽然冒泡排序简单,实际工程中也基本用不到,不过用来入门算法还是不错的。using System;/// /// 冒泡排序,最基本的排序/// 两两比较,碰到大的交换,碰到小的不变,最终大的放后面小的排到前面/// 由于比较次数很多,性能一般,实际用处较少/// 时间复杂度为n2/// namespace test{ class MainC原创 2015-10-15 21:04:06 · 356 阅读 · 0 评论 -
算法之字符串选出第一个只出现一次的字符
好久没写了...最近打算恢复博客,尽力而为吧。给出一串字符串,返回第一个只出现一次的字符。如:输入:aabbccddeff返回:f最先想到了就是将每个字符都与所有字符对比一遍,不存在相同的则输出,时间复杂度显然是o(n2)。当时看到这道谷歌的面试题时,我想到前几天看到用异或比较二进制从而解决两个对象是否相同的问题。但异或只有偶数个相同的值才能得0,奇数个相同的值得他本身,在这道原创 2016-10-14 13:35:50 · 1153 阅读 · 1 评论 -
算法之反转链表
问题很简单:反转一个链表。其实就是对链表的基础操作,思路是顺着链表头结点的next指针遍历整个链表。假设链表前三个节点分别为A、B、C。1.A->next = C;2.B->next = A;以A的next节点作为判断依据即可遍历整个链表并实现前后两个节点的指针反转。虽然思路很简单,但写的时候发现C的快忘得差不多了,为了复习C我在C++工程中完全以C的代码实现的。诸如new方法我用原创 2016-10-25 23:27:01 · 371 阅读 · 0 评论 -
算法之将字符串的部分移动
算法题:给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部,使得原字符串变成字符串“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。 最开始想到的就是将整个数组前移两次。符合空间复杂度O(1)。#includeusing namesp原创 2016-10-17 23:14:16 · 674 阅读 · 0 评论 -
求一个数的约数和其数量
约数定义:约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。在大学之前,"约数"一词所指的一般只限于正约数。约数和倍数都是二元关系的概念,不能孤立地说某个整数是约数或倍数。一个整数的约数是有限的。同时,它可以在特定情况下成为公约数。代码如下:#include#includeusing nam原创 2016-11-20 14:09:06 · 6357 阅读 · 0 评论 -
算法之求两个数组各任意一位相加和组成的新数组中的前k位
输入时两个整数数组,他们任意两个数的和又可以组成一个数组,求这个和中前k个大的数。如题,首先想到的暴力排序,把两个数组能相加得所有数放入一个新的数组,然后用各种排序,假设第一个数组长m,第二个数组长n。若用快速排序或堆排序等较快的排序。时间复杂度为o((log2(m+n))*(m+n)),空间复杂度为o(m+n)。显然我们只需要前k个大的数,并不需要存储所有相加得到的和,当k足够小时,空间有一原创 2016-11-20 21:42:53 · 1728 阅读 · 0 评论