zoukankan      html  css  js  c++  java
  • 冒泡排序

    本篇一起来学习冒泡排序的算法,今天跟大家一起来学冒泡排序算法。

    本篇将会使用C语言、ObjC和Swift分别来实现冒泡排序,并通过ObjC来举一个模型类冒泡排序的小例子,希望对大家在开发中应用算法有所帮助。

    核心思想

    算法最讲究的就是算法的思想,只要将算法思想想明白了,就可以通过伪代码来写出算法,那么再使用对应的语言来实现就可以了。

    冒泡排序的核心思想就是通过与相邻元素的比较和交换,把小的数交换到最前面。因为这个过程类似于水泡向上升一样,因此被命名为冒泡排序。

    举个小例子:对5,3,8,6,4这个无序序列进行冒泡排序。

    首先从后向前冒泡,4和6比较,把4交换到前面,序列变成5,3,8,4,6。同理4和8交换,变成5,3,4,8,6,3和4无需交换。5和3交换,变成3,5,4,8,6.这样一次冒泡就完了,把最小的数3排到最前面了。对剩下的序列依次冒泡就会得到一个有序序列。

    其过程大概是这样的:

    第一趟:

    第二趟:

    这里只需要两趟就可以排序完成了。

    时间复杂度

    从算法思想可知,冒泡排序需要两个循环来控制遍历,也就是需要n * n趟才能判断、交换完成。

    冒泡排序的时间复杂度为O ( n2 )。

    伪代码

    C语言版

    测试一下:

    ObjC版

    测试使用:

    Swift版

    测试使用:

    尝试给Model排序

    测试:

  • 相关阅读:
    洛谷 P1706 全排列
    n皇后问题
    跳马
    [HDOJ4612]Warm up(双连通分量,缩点,树直径)
    [POJ3177]Redundant Paths(双连通图,割边,桥,重边)
    [POJ3352]Road Construction(缩点,割边,桥,环)
    [POJ3694]Network(LCA, 割边, 桥)
    [UVA796]Critical Links(割边, 桥)
    [UVA315]Network(tarjan, 求割点)
    [HDOJ2586]How far away?(最近公共祖先, 离线tarjan, 并查集)
  • 原文地址:https://www.cnblogs.com/gongyuhonglou/p/6064578.html
Copyright © 2011-2022 走看看