美文网首页
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