美文网首页
选择排序

选择排序

作者: 点滴86 | 来源:发表于2024-08-11 22:29 被阅读0次

    选择排序

    选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。



    代码实现如下:

    @interface DMSelectionSort : NSObject
    
    // 选择排序
    - (void)selectionSort:(NSMutableArray *)array;
    
    @end
    
    @implementation DMSelectionSort
    
    - (void)selectionSort:(NSMutableArray *)array
    {
        NSLog(@"选择排序前数据:%@", array);
        NSInteger count = [array count];
        for (NSInteger i = 0; i < count - 1; i++) {
            NSNumber *tmpValue = [array objectAtIndex:i];
            NSNumber *minValue = tmpValue;
            NSInteger minIndex = i;
            for (NSInteger j = i + 1; j < count; j++) {
                NSNumber *twoValue = [array objectAtIndex:j];
                if ([minValue integerValue] > [twoValue integerValue]) {
                    minValue = twoValue;
                    minIndex = j;
                }
            }
            
            if (minIndex != i) {
                // 互换
                [array replaceObjectAtIndex:i withObject:minValue];
                [array replaceObjectAtIndex:minIndex withObject:tmpValue];
            }
        }
        NSLog(@"选择排序后数据:%@", array);
    }
    
    @end
    
    @interface DMSortDemo : NSObject
    
    @end
    
    @implementation DMSortDemo
    
    - (void)demo 
    {   
        // 选择排序
        DMSelectionSort *selectionSort = [[DMSelectionSort alloc] init];
        {
            NSMutableArray *dataArray = [[NSMutableArray alloc] init];
            [dataArray addObject:[NSNumber numberWithInteger:4]];
            [dataArray addObject:[NSNumber numberWithInteger:5]];
            [dataArray addObject:[NSNumber numberWithInteger:6]];
            [dataArray addObject:[NSNumber numberWithInteger:1]];
            [dataArray addObject:[NSNumber numberWithInteger:3]];
            [dataArray addObject:[NSNumber numberWithInteger:2]];
            [selectionSort selectionSort:dataArray];
        }
        {
            NSMutableArray *dataArray = [[NSMutableArray alloc] init];
            [dataArray addObject:[NSNumber numberWithInteger:3]];
            [dataArray addObject:[NSNumber numberWithInteger:5]];
            [dataArray addObject:[NSNumber numberWithInteger:4]];
            [dataArray addObject:[NSNumber numberWithInteger:1]];
            [dataArray addObject:[NSNumber numberWithInteger:2]];
            [dataArray addObject:[NSNumber numberWithInteger:6]];
            [selectionSort selectionSort:dataArray];
        }
    }
    
    @end
    

    首先,选择排序空间复杂度为O(1),是一种原地排序算法。选择排序的最好情况时间复杂度、最坏情况和平均情况时间复杂度都为O(n * n)。
    选择排序是一种不稳定的排序算法。从第一张图可以看出来,选择排序每次都要找剩余未排序元素中的最小值,并和前面的元素交换位置,这样破坏了稳定性。比如5,8,5,2,9这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素2,与第一个5交换位置,那第一个5和中间的5顺序就变了,所以就不稳定了。

    相关文章

      网友评论

          本文标题:选择排序

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