算法基础

不积跬步,无以至千里;不积小流,无以成江海


iOS开发中基本上用不到什么算法,但是在面试的时候又会经常问算法方面相关的。

在工作中冒泡排序用的比较多,一般面试反而问到底是快速排序,它的效率更高,需要掌握。

- (void)quickSortWithArr:(NSMutableArray *)arr left:(NSInteger)left right:(NSInteger)right{
    if (left >= right) return;
    NSInteger i = left;
    NSInteger j = right;
    NSInteger key = [arr[i] integerValue];
    while (i<j) {
        while (i<j && [arr[j] integerValue] >= key) {//从右侧找到第一个比key小的
            j--;
        }
        arr[i] = arr[j];
        while (i<j && [arr[i] integerValue] <= key) {//从左边找到第一个比key大的
            i++;
        }
        arr[j] = arr[i];
    }
    arr[i] = [NSNumber numberWithInteger:key];
    [self quickSortWithArr:arr left:left right:i-1];
    [self quickSortWithArr:arr left:i+1 right:right];
}

另外一个常用到的是递归的思想,在工作中也会经常遇到,自己调用自己。其实上述快排就已经用到了递归。一个经典的题目N的阶乘(0的阶乘是1,负数没有阶乘)。

- (NSInteger)recursionFactorialWithNum:(NSInteger)num{
    if (num == 0) {
        return 1;
    }else{
        return num * [self recursionFactorialWithNum:num-1];
    }
}

这两个比较有代表意义,先写这两个,想到了新的再补充


跑得慢,听到的是骂声; 跑得快,听到的就只是风声


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 以下是高德纳在他的著作《计算机程序设计艺术》里对算法的特征归纳:输入:一个算法必须有零个或以上输入量。输出:一个算...
    浮云都想对你说阅读 512评论 0 0
  • 前言: 现在安卓面试,对于算法的问题也越来越多了,要求也越来越多,特别是排序,基本必考题,而且还动不动就要手写,所...
    青蛙要fly阅读 1,181评论 1 8
  • 我的Github地址 : Jerry4me, demo : JRBaseAlgorithm 本文主要是通过通俗易懂...
    Jerry4me阅读 14,476评论 8 202
  • 数据 元素又称为元素、结点、记录是数据的基本单位 数据项是具有独立含义的最小标识单位 数据的逻辑结构 数据的逻辑结...
    PPPeg阅读 13,800评论 0 15
  • 入坑107天,一开始的热情全部投在买买买上 分装买 整卷买 后来热情渐渐褪去,变得冷静之后,认认真真开始把生活点滴...
    狮垚阅读 608评论 2 3