美文网首页
第二讲 简单排序

第二讲 简单排序

作者: 飞奔的小鲨鱼 | 来源:发表于2018-11-22 21:09 被阅读0次

冒泡排序

简单来讲,就是依次比较相邻的两个数,将小数放在前面,大数放在后面,即交换两个数的位置。
ex:@[@(49),@(38),@(65),@(97),@(76),@(13),@(27),@(33)]
第1次排序:@[@(38),@(49),@(65),@(76),@(13),@(27),@(33),@(97)]
第2次排序:@[@(38),@(49),@(65),@(13),@(27),@(33),@(76),@(97)]
第3次排序:@[@(38),@(49),@(13),@(27),@(33),@(65),@(76),@(97)]
第4次排序:@[@(38),@(13),@(27),@(33),@(49),@(65),@(76),@(97)]
第5次排序:@[@(13),@(27),@(33),@(38),@(49),@(65),@(76),@(97)]

代码实现:

#pragma mark - 冒泡排序
- (NSArray *)bubbleSort:(NSArray *)array{
    NSMutableArray * temp = [NSMutableArray arrayWithArray:array];
    for(int i = 0;i < temp.count;i++){
        for (int j = 0 ; j < temp.count - 1 - i; j++) {
            if(temp[j] > temp[j+1]){
                id tmp = temp[j];
                temp[j] = temp[j+1];
                temp[j+1] = tmp;
            }
        }
    }
    NSLog(@"冒泡排序 ------------- > %@",temp);
    return temp;
}

打印结果:

冒泡排序 ------------- > (
    13,
    27,
    33,
    38,
    49,
    65,
    76,
    97
)

插入排序

基本思想是每一步将一个待排序的数据,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。

#pragma mark - 插入排序
- (NSArray *)insertSort:(NSArray *)array{
    NSMutableArray * temp = [NSMutableArray arrayWithArray:array];
    for(int i = 1;i < temp.count;i++){
        int j = i;
        while (j>0 && temp[j]<temp[j-1]) {
            id tmp = temp[j];
            temp[j] = temp[j-1];
            temp[j-1] = tmp;
            j--;
        }
    }
    NSLog(@"插入排序 ------------- > %@",temp);
    return temp;
}

打印结果:

插入排序 ------------- > (
    13,
    27,
    33,
    38,
    49,
    65,
    76,
    97
)

选择排序

基本思想:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

#pragma mark - 选择排序
- (NSArray *)selectSort:(NSArray *)array{
    NSMutableArray * temp = [NSMutableArray arrayWithArray:array];
    for(int i = 1;i < temp.count;i++){
        int min = i;
        for (int j = i+1; j < temp.count; j++) {
            if (temp[j] < temp[i]) {
                min = j;
            }
        }
        if (min != i) {
            id tmp = temp[i];
            temp[i] = temp[min];
            temp[min] = tmp;
        }
    }
    NSLog(@"选择排序 ------------- > %@",temp);
    return temp;
}

打印结果:

选择排序 ------------- > (
    13,
    27,
    33,
    38,
    49,
    65,
    76,
    97
)

三种排序方式的对比

排序方式 平均时间复杂度 空间复杂度 稳定性 复杂性
冒泡排序 o(n^2) o(1) 稳定 简单
插入排序 o(n^2) o(1) 稳定 简单
选择排序 o(n^2) o(1) 不稳定 简单

相关文章

  • 第二讲 简单排序

    冒泡排序 简单来讲,就是依次比较相邻的两个数,将小数放在前面,大数放在后面,即交换两个数的位置。ex:@[@(49...

  • 选择排序

    选择排序 今天给大家介绍另一种算法:选择排序。选择排序是非常简单,但是并不算很快的一种排序。之所以讲这个,是为了更...

  • 快速计算冒泡算法时间复杂度

    冒泡排序程序简单,基本大家都会,今天讲下如何计算其时间复杂度。算法比较简单,简单讲下大家应该就明白了。 最坏情况:...

  • 排序算法系列(9)——基数排序

    本节开始讲一下分配排序中的基数排序,其实分配排序相对来说比较简单,基本上离不开一个桶/盒的概念,分配排序的思想,我...

  • JS基础案例21-数组之冒泡排序

    arr=[1,4,0,5,6,2,3]; // 进行排序。 冒泡排序第一种方法,简单版 冒泡排序第二种方法,简...

  • 常用排序算法(Python实现), 持续更新中

    一、非线性时间比较类排序 交换排序冒泡排序快速排序 插入排序简单插入排序希尔排序 选择排序简单选择排序堆排序 归并...

  • 排序算法---冒泡排序(Bubble Sort)

    书上说:“冒泡排序算法是所有排序算法中最简单、最基本的一种”。。。?!哇。。。讲真我花了一个小时才完全领悟(发现自...

  • 排序

    选择排序简单选择排序在未排序序列中找出最小元素与序首元素交换位置,然后再剩下的未排序序列中找出最小元素与序列第二位...

  • 基础算法|简单选择排序

    简单选择排序是一种排序算法,指在简单选择排序过程中,所需移动记录的次数比较少。简单选择排序是不稳定排序。 简单选择...

  • 简单算法之冒泡排序

    冒泡排序通俗的讲就是把数据源中的元素两两比对,然后改变它们的下标来达到排序效果,排序的效率一般比较简单,属于入门级...

网友评论

      本文标题:第二讲 简单排序

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