美文网首页
iOS之选择排序算法

iOS之选择排序算法

作者: 乐一游 | 来源:发表于2019-05-14 19:37 被阅读0次

    选择排序:
    选择排序(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²)。

    相关文章

      网友评论

          本文标题:iOS之选择排序算法

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