iOS之选择排序算法

选择排序:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
废话不说,上OC版本的代码:

//选择排序
//每次把最大的选出来 放到前面,然后依次类推
-(NSArray*)selectSort:(NSArray*)array
{
    if (!array || array.count == 1)
    {
        return array;
    }    
    NSMutableArray *sortResult = [NSMutableArray arrayWithArray:array];
    NSInteger flag;
    NSInteger execCount = 0;//交换次数
    NSInteger forCount = 0;//for循环总共执行了多少次
    for (NSInteger i = 0; i < sortResult.count; i++)
    {
        flag = i;
        forCount++;
        for (NSInteger j = i; j < sortResult.count - 1; j++)
        {
            if (sortResult[j + 1] > sortResult[flag])
            {
                flag = j + 1;
            }
            forCount++;
        }
        if (i != flag)
        {
            [sortResult exchangeObjectAtIndex:i withObjectAtIndex:flag];
            execCount++;
            [self displayArray:sortResult];
        }
    }
    NSLog(@"交换共执行了%ld次", execCount);
    NSLog(@"for循环共执行了%ld次", forCount);
    return sortResult;
}
-(void)displayArray:(NSArray*)array
{
    NSMutableString *displayString = [NSMutableString stringWithString:@"["];
    for (NSInteger i = 0; i < array.count; i++)
    {
        i == array.count - 1 ? [displayString appendString:[NSString stringWithFormat:@"%ld", (long)[array[i] integerValue]]] :[displayString appendString:[NSString stringWithFormat:@"%ld%@", (long)[array[i] integerValue], @","]];
    }
    [displayString appendString:@"]"];
    NSLog(@"%@", displayString);
}

执行结果如下:

2019-05-14 19:26:35.013 20190507_sort[4804:434106] [101,14,1,38,26,9,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,1,14,26,9,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,26,14,1,9,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,26,14,9,1,4,7]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] [101,38,26,14,9,7,4,1]
2019-05-14 19:26:35.014 20190507_sort[4804:434106] 交换共执行了5次
2019-05-14 19:26:35.014 20190507_sort[4804:434106] for循环共执行了36次

简单快速排序的算法时间复杂度同样为O(n²)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可...
    意识流丶阅读 3,311评论 2 9
  • 概述 因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总...
    清风之心阅读 798评论 0 1
  • 韩露 上海必趣医疗科技有限公司 112期学员 423期感谢一组志工 【日精进打卡第006天】 【知~学习】 《六项...
    Chris_han7阅读 220评论 0 0
  • 早安️#申丽0218~优秀是一种习惯2018-3 20180319(第41天) 今日青蛙达成 幕布周数据 周学习&...
    暖熙1988阅读 197评论 0 0
  • 一场秋雨一场寒,草木摇落露为霜。晚秋至,天气凉,鸿雁已南翔,咋暖还寒,望君加件厚衣裳。 夜里,我一个人走着...
    4e335f25f38b阅读 67评论 0 1

友情链接更多精彩内容