
算法
MOKA
这个作者很懒,什么都没留下…
展开
-
一个优化过的OC的简单冒泡排序算法
话说用OC来写排序算法,其实基本上是使用不到的。因为OC底层已经提供了一些现成的经优化过的排序算法。这里只是为了用OC来实现,并说明一下其中使用的一个BOOl isFinished可以有效地优化排序算法,降低时间复杂度。typedef struct JJListNode { NSInteger data; struct JJListNode *next;}listM转载 2016-05-27 17:02:16 · 410 阅读 · 0 评论 -
插入排序
插入排序一、基本思想通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。插入排序非常类似于整扑克牌。在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。如果输入数组已经是排好序的转载 2016-05-22 19:58:25 · 298 阅读 · 0 评论 -
各类排序算法总结
以上是内部排序方法的一个分类框图。首先,我们来分析一下各类排序方法所基于的基本原理:插入排序:将待排序的序列中的元素一个一个地插入到已经排序好的有序序列中。快速排序:通过一趟排序将待排序列分割成两个部分,一个部分的所有关键字都比另一个部分的关键字小,然后再按照此方法对这两个部分的数列进行上述操作。选择排序:每次从待排序列中选出最大或者最小的元素。只到待排序列中所有的元素均被选出。归并排转载 2016-05-22 21:39:54 · 475 阅读 · 0 评论 -
排序-算法总结
==============================冒泡排序算法==============================1.算法稳定性 稳定2.复杂度 空间复杂度O(1); 平均时间复杂度O(n2)3.极限情况分析 最好情况:向量本来就是有序的,则一趟扫描即可结束,共比较n-1次,无交换。 最坏情况:向量是逆序的,则一共需要做n-1转载 2016-05-22 21:43:06 · 385 阅读 · 0 评论 -
查找-算法总结
====================顺序查找算法====================1. 算法描述 顺序比较即可。2. 平均查找长度 (n+1)/2, 其中n为表长。 3. 算法实现 省略 4. 优化思想 根据经验,目前被查到越多的元素,将来可能被查到的可能性也越大。所以可以考虑,每次查找到一个元素后,将它和直接前驱交换位置。转载 2016-05-22 21:44:45 · 271 阅读 · 0 评论 -
中位数和顺序统计
如何求取数组中第i 小(大)的数,好像就是顺序统计了,反正我是这么理解的。。。有了顺序统计,求取中位数就方便了。假设数组有n个元素,如果n为奇数,则转化为求取第(n+1)/2小的元素;如果n为偶数,则转化为求取第n/2小和第n/2+1小的元素,并取平均值得到。中位数的好处? 好像是为了解决求平均值时的一个弊端:如果样本中有一个极大值,其它大部分都是普通值,则求出平均值和真实情况相比误差很大转载 2016-05-22 21:46:13 · 400 阅读 · 0 评论 -
几种常见的查找算法之比较
一、顺序查找 条件:无序或有序队列。 原理:按顺序比较每个元素,直到找到关键字为止。 时间复杂度:O(n)二、二分查找(折半查找) 条件:有序数组 原理:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 如果在转载 2016-05-23 01:07:09 · 4046 阅读 · 1 评论 -
程序员必须知道的10大基础实用算法及其讲解(Javascript代码实现)
注:本文的文字解释部分并非原创,我只是对其实现用JavaScript代码来实现,以供大家学习和参考。如有错误还请不吝指出。原文地址:程序员必须知道的10大基础实用算法及其讲解算法一:快速排序算法快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(转载 2016-05-23 01:08:07 · 8193 阅读 · 1 评论 -
最快的内容查找算法-----暴雪的Hash算法
暴雪公司有个经典的字符串的hash公式 先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做? 有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都能把这样一个程序作出来,但要是有程序员把这样的程序交给用户,我只能用无语来评价,或许它真的能工作,但也只能如此了。转载 2016-05-23 01:09:19 · 2255 阅读 · 0 评论 -
五种查找算法总结
五种查找算法总结 一、顺序查找 条件:无序或有序队列。 原理:按顺序比较每个元素,直到找到关键字为止。 时间复杂度:O(n) 二、二分查找(折半查找) 条件:有序数组 原理:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且转载 2016-05-23 01:12:14 · 3633 阅读 · 0 评论 -
一步一步写算法(之查找)等一系列算法
无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能。数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下。我们假定查找的数据唯一存在,数组中没有重复的数据存在。 (1) 普通的数据查找 设想有一个1M的数据,我们如何在里面找到我们想要的那个数据。此时数据本身没有特征,所以我们需要的那个数据可能出现在数组的各个位置,转载 2016-05-23 01:13:02 · 360 阅读 · 0 评论 -
典型的查找算法
查找:只进行查找的称为静态查找表;在查找的过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的元素,称为动态查找表。静态查找:1.顺序查找:算法思想:从表中最后一个记录开始,逐个进行记录的关键字和给定值的比较,若某个记录的关键字和给定值比较相等,则查找成功,找到所查记录;反之,若直至第一个记录,其关键字和给定值比较都不等,则表明表中没有所查记录,查找不成功平转载 2016-05-23 01:14:58 · 354 阅读 · 0 评论 -
常见的查找算法
一、顺序查找说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表/** * 在s[0]-s[n-1]中顺序查找关键字为Key的记录 ,查找成功时返回该记录的下标序号;失败时返回-1 */ int SequelSearch(elemtype s[], keytype Key, int n){ int i; i = 0; while (i < n && s[转载 2016-05-23 01:15:35 · 521 阅读 · 0 评论 -
查找算法
一、查找的基本概念查找,也可称检索,是在大量的数据元素中找到某个特定的数据元素而进行的工作。查找是一种操作。 二、顺序查找针对无序序列的一种最简单的查找方式。时间复杂度为O(n)。 三、折半查找针对已排序序列的一种查找方式。并且只适用于顺序存储结构的序列。要求序列中的元素基本不变,在需要做删除和插入操作的时候,会影响检索效率。时间复杂度为O(logN)。转载 2016-05-23 01:18:04 · 389 阅读 · 0 评论 -
字符串匹配的KMP算法
阮一峰 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_al字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这转载 2016-05-23 01:19:04 · 264 阅读 · 0 评论 -
字符串匹配的KMP算法
阮一峰 http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_al字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这转载 2016-05-23 01:20:08 · 324 阅读 · 0 评论 -
Trie—单词查找树 l 简介
Trie—单词查找树l 简介Trie,又称单词查找树、前缀树,是一种哈希树的变种。应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计。含有单词“tea”“tree”“A”“ZSU”的一棵Trie。l 性质n 根节点不包含字符,除根节点外的每一个节点都只包含一个字符。n 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。n 每个节转载 2016-05-23 01:23:40 · 676 阅读 · 0 评论 -
选择排序
经典排序算法 - 选择排序Selection sort顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,顺序放入新数组,直到全部拿完再简单点,对着一群数组说,你们谁最小出列,站到最后边然后继续对剩余的无序数组说,你们谁最小出列,站到最后边再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大举例先说看每步的状态变转载 2016-05-22 20:26:06 · 361 阅读 · 0 评论 -
冒泡排序
冒泡排序:原理:冒泡顾名思义,就像气泡从水底冒出一样,它的排序方式是:研究了一下,它给人的感觉是像近视眼一样,它只能看见自己和紧挨着自己的下一个数字,所以它的排序方式也就是将比较元素和紧挨着自己的元素比较看是否交换位置,然后持续这个过程,比较的一直都是紧挨着的两个元素。下面看代码吧,再代码里面再详细解释。冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走转载 2016-05-22 20:21:45 · 328 阅读 · 0 评论 -
排序算法性能和使用场景总结
按平均时间将排序分为四类:(1)平方阶(O(n2))排序 一般称为简单排序,例如直接插入、直接选择和冒泡排序;(2)线性对数阶(O(nlgn))排序 如快速、堆和归并排序;(3)O(n1+£)阶排序 £是介于0和1之间的常数,即0(4)线性阶(O(n))排序 如桶、箱和基数排序。各种排序方法比较转载 2016-05-28 16:14:33 · 1252 阅读 · 0 评论 -
C#实现所有经典排序算法汇总zz
1、选择排序class SelectionSorter { private int min; public void Sort(int[] arr) { for (int i = 0; i arr.Length - 1; ++i) { mi转载 2016-05-28 16:16:45 · 310 阅读 · 0 评论 -
排序总结(总结的非常好)
前几天应一个朋友的要求,帮他完成了数据排序的一个作业。觉得很有给大家参考的价值,所以经过他同意,作了些修改帖了上来。源代码见附件,代码中实现了8种排序算法,各算法名称见下表或见源码。运行程序时,将需要你输入一数值,以确定对多少随机数进行排序。然后将会显示各排序算法的耗时。并且你可选择时否进行正序和反序测试。由于水平有限,可能存在一些错误,还请各位多多指点! 通过实验我们可将结果列入下表。转载 2016-05-28 16:20:47 · 1860 阅读 · 0 评论 -
最快的内容查找算法-----暴雪的Hash算法
暴雪公司有个经典的字符串的hash公式 先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做? 有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都能把这样一个程序作出来,但要是有程序员把这样的程序交给用户,我只能用无语来评价,或许它真的能工作,但也只能如此了。转载 2016-05-16 12:58:49 · 626 阅读 · 0 评论 -
iOS算法(一)快速排序算法
快速排序是当遇到较大数据时,排序快,高效的方法(公司面试时,基本上会被问到...)该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。简单地理解就是,找一个基准数(待排序的任意数,一般都是选定首元素),把比小于等于基准数的元素放到基准数的左边,把大转载 2016-05-16 13:04:50 · 4900 阅读 · 0 评论 -
12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来。比如说作为最基本的排序算法就种类很多,转载 2016-05-19 21:06:39 · 2174 阅读 · 0 评论 -
几种有趣的不常见排序
鸡尾酒排序鸽巢排序奇偶排序梳排序臭皮匠排序几种有趣的不常见排序算法我们常见的排序算法有简单选择,冒泡,插入,两路合并,希尔,堆,快速排序等等,下面介绍几种不常见的排序算法。 鸡尾酒排序鸡尾酒排序是冒泡排序的微调算法。我们还记得,冒泡排序是每次遍历整个序列,把较大的(我们这里假设升序排序)交换到后面。鸡尾酒排序在交换到后面后,再逆向把最小的交换到前面。为什么取名叫鸡尾转载 2016-05-19 21:14:53 · 652 阅读 · 1 评论 -
经典算法51(来测测你的编程基础)
02 79502 90000 放入草莓背 1 2 3 4 5 6 7 8 包负重 valueitem 11003 22502 335转载 2016-05-19 21:17:40 · 1710 阅读 · 0 评论 -
编程之美3:最大公约数问题
编程之美3:最大公约数问题分类: Beauty of Programming解法一:(辗转相除法)假设用f(x, y)表示x,y的最大公约数,取k = x/y,b = x%y,则x = ky + b。如果一个数能够同时整除x和y,则必能同时整除b和y;而能够同时整除b和y的数也必能同时整除x和y,即x和y的公约数与b和y的公约数是相同的,其最大公约数也是相同的,则有f(x,转载 2016-05-19 21:24:16 · 415 阅读 · 0 评论 -
二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]
二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ]Posted on 2013-02-03 12:52 fancydeepin 阅读(3341) 评论(0) 编辑 收藏 所属分类: 数据结构 深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,转载 2016-05-21 12:55:54 · 539 阅读 · 0 评论 -
魔方问题
import java.io.*;import java.util.*;public class mofang{public static void main(String []args){ Scanner sc=new Scanner(System.in); //输入一个数 int count=0; count=sc.nextInt(); int a[][]=转载 2016-05-21 12:57:27 · 360 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题 从1到500 每次数到3就踢出去 循环执行 最后剩下的那个数是多少public class ysf{ public static void main(String []args){ boolean[]arr =new boolean[500]; for(int i=0;i arr[i]=true; } int num=0转载 2016-05-21 12:58:15 · 267 阅读 · 0 评论 -
链表和数组的区别在哪里?
数组和链表的区别数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。链表恰好相反,链表中的元素在内转载 2016-05-22 20:09:53 · 406 阅读 · 0 评论 -
二分查找
二分查找:二分查找是很常见而且高效的查找方式,比普通查找速度快的多。普通查找:遍历数组和查询值进行比较; 二分查找:定义中间值和所查找值进行比较,小于中间值就查找中间值左边的值,大于则相反。 所以,二分查找要满足被查的数组是有序排列的。下面代码分别是普通查找,二分查找和递归实现的二分查找。介绍二转载 2016-05-22 20:15:20 · 315 阅读 · 0 评论 -
排序算法的 时间复杂度 和 空间复杂度
常用的排序算法的时间复杂度和空间复杂度排序法 最差时间分析平均时间复杂度 稳定度 空间复杂度 冒泡排序O(n2)O(n2)稳定 O(1) 快速排序O(n2)O(n*log2n)不稳定 O(log2n)~O(n)选择排序O(n2)O(n2)稳定转载 2016-05-22 20:23:13 · 301 阅读 · 0 评论 -
八种排序算法效率比较
从刚上大一那会儿学的C语言开始,就已经接触到了不少排序算法,但当时都只是为了完成简单的排序任务而已,而且所给的数据也不够多,所以看不出各个排序算法间的执行效率的优劣。最近有个数据结构课程设计的实验,是有关于排序算法之间的效率比较,我就顺便把它放上来了,并对各个算法执行的效率时间做了柱形统计图表。此次实验主要测试了8种排序算法:插入排序、快速排序、冒泡排序、希尔排序、简单选择排序、堆排序、归并排序、转载 2016-05-23 01:25:06 · 12552 阅读 · 4 评论