美文网首页
iOS面试中常被问到的算法—排序算法

iOS面试中常被问到的算法—排序算法

作者: 萧禹 | 来源:发表于2017-05-24 16:36 被阅读61次

面试过程中常常被问到算法,为此特别整理一下以备不时之需。
一、冒泡排序

NSMutableArray *arr_M = [NSMutableArray arrayWithObjects:@1,@4,@2,@3,@5,nil];
   for (int i = 0; i < arr_M.count; ++i) {

        //遍历数组的每一个`索引`(不包括最后一个,因为比较的是j+1)
        for (int j = 0; j < arr_M.count-1; ++j) {

            //根据索引的`相邻两位`进行`比较`
            if (arr_M[j] < arr_M[j+1]) {

                [arr_M exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }

        }
    }

二、选择排序

+ (void)selectSort:(NSMutableArray *)array  
{  
    if(array == nil || array.count == 0){  
        return;  
    }  
      
    int min_index;  
    for (int i = 0; i < array.count; i++) {  
        min_index = i;  
        for (int j = i + 1; j<array.count; j++) {  
            if ([array[j] compare:array[min_index]] == NSOrderedAscending) {  
                [array exchangeObjectAtIndex:j withObjectAtIndex:min_index];  
            }  
              
            printf("排序中:");  
            [self printArray:array];  
        }  
    }  
}  

三、插入排序

+ (void)inserSort:(NSMutableArray *)array  
{  
    if(array == nil || array.count == 0){  
        return;  
    }  
      
    for (int i = 0; i < array.count; i++) {  
        NSNumber *temp = array[i];  
        int j = i-1;  
          
        while (j >= 0 && [array[j] compare:temp] == NSOrderedDescending) {  
            [array replaceObjectAtIndex:j+1 withObject:array[j]];  
            j--;  
              
            printf("排序中:");  
            [self printArray:array];  
        }  
          
        [array replaceObjectAtIndex:j+1 withObject:temp];  
    }  
}  

四、快速排序

+ (void)quickSort:(NSMutableArray *)array low:(int)low high:(int)high  
{  
    if(array == nil || array.count == 0){  
        return;  
    }  
    if (low >= high) {  
        return;  
    }  
      
    //取中值  
    int middle = low + (high - low)/2;  
    NSNumber *prmt = array[middle];  
    int i = low;  
    int j = high;  
      
    //开始排序,使得left<prmt 同时right>prmt  
    while (i <= j) {  
//        while ([array[i] compare:prmt] == NSOrderedAscending) {  该行与下一行作用相同  
        while ([array[i] intValue] < [prmt intValue]) {  
            i++;  
        }  
//        while ([array[j] compare:prmt] == NSOrderedDescending) { 该行与下一行作用相同  
        while ([array[j] intValue] > [prmt intValue]) {  
            j--;  
        }  
          
        if(i <= j){  
            [array exchangeObjectAtIndex:i withObjectAtIndex:j];  
            i++;  
            j--;  
        }  
          
        printf("排序中:");  
        [self printArray:array];  
    }  
      
    if (low < j) {  
        [self quickSort:array low:low high:j];  
    }  
    if (high > i) {  
        [self quickSort:array low:i high:high];  
    }  
}  
  


相关文章

  • 简单的排序算法-python

    之前面试的时候经常被问到排序算法,每次都回答不上来,排序算法算是对算法的入门,对于排序算法想要掌握应该先掌握排序算...

  • iOS面试中常被问到的算法—排序算法

    面试过程中常常被问到算法,为此特别整理一下以备不时之需。一、冒泡排序 二、选择排序 三、插入排序 四、快速排序

  • 快速串讲校招高频面试题——排序算法和复杂度

    在校招面试中,排序算法是经常被问到的。排序算法又比较多,很容易遗忘和混淆。建议收藏起来,面试前可以快速过一遍。正所...

  • [黑马程序员济南] JAVA常见的排序算法

    [黑马程序员济南] JAVA常见的排序算法 在面试的过程中,经常被问到常用的排序算法有哪些,但是大部分开发人员都是...

  • 排序算法(一)

    排序算法是算法的入门知识,在面试中经常被问到排序算法及相关的问题,因此在学习的同时做一次总结。欢迎访问作者的个人博...

  • 排序算法

    在算法中,无外乎最重要的就是排序算法,尤其是在面试中经常会被问到什么冒泡排序,选择排序,插入排序等等,那么在...

  • 各种排序算法的使用范围

    面试题目:各种排序算法的使用范围 解析: 排序可以算是最基本,最常用的算法,也是笔试面试中最常被考的算法,最基本的...

  • TopK问题-基于堆排序和快速排序的实现

      Top K 问题相信大家在面试过程中,经常被问到,下面就为大家来讲讲两种常见的实现算法。 一. 基于堆排序实现...

  • PHP 实现冒泡排序

    导语 冒泡排序是相对比较简单、常用的算法,同时在面试中也是最常被问到的问题。自认能力不够,不能有更深的理解,下面就...

  • Objective-C排序算法集合

    前言 在开发中,也许算法很少用到,但是面试的时候被面试官问到算法方面的知识,就一脸懵逼了!这里整理了一些排序算法:...

网友评论

      本文标题:iOS面试中常被问到的算法—排序算法

      本文链接:https://www.haomeiwen.com/subject/ohroxxtx.html