• 插入、选择、冒泡排序的综述


    插入、选择、冒泡排序算法都比较简单,平均时间复杂度均为O(n2),属于低效的排序。问题在于,我们需要深入认识并理解他们的排序思想:

    1 插入排序:

              插入排序的基本原则是这样的:从第二个元素开始,到最后一个元素(共n-1趟遍历),对于每个当前元素,如果它前面的元素元素比该元素大(比如a[0]》a[2]),那么将这些前面的元素都向后移动一位,同时将当前元素插入到空位处!!!

              在此,我们抓住插入排序的两个要点:1 对n-1个元素均要进行比较操作;2 每一次的比较 都是 拿当前元素 与其前面所有的数进行比较(可以认为这是一种全局性的比较)。

    2 选择排序:

              选择排序的原则是这样的:先从所有n个数中选择最小的,把它放在第一位;再从剩下的n-1个数中选择最小的,把它放在第二位;......(剩下操作雷同,有没有感觉选择排序很像我们日常的操作方式?)。

            在此,给出选择排序的两个要点:1 每次的比较都是  在当前剩下的所有数中找一个全局最小的(尽管和插入排序比较的对象不同,但是比较的范围是相同的,只不过是倒着来的)2 我们要进行n-1次选择最小这样的操作(最后剩下的一个自然是最小的)

    3  冒泡排序:

           冒泡排序的原则是这样的: 第一轮冒泡,将最大的数冒泡到最后,第二轮冒泡将次大的数冒泡到倒数第二的位置....(剩下的操作雷同),因此一共进行n-1次冒泡。每一轮的冒泡,是扎样操作的:将相邻的元素比较(从标号0的数开始),如果前面的数大于后面的数,则将其冒泡到后面(即交换位置),一直到冒泡到属于这个元素应该在的位置(比如最大的数,冒泡到最后),因此这里的比较,是局部操作,但是一轮冒泡,整体上仍然是一种全局操作。

    仔细观察上述操作,我们发现他们的共同点在于: 要完成所有元素的排序,总要进行n-1个“大操作”;对于每一次的操作,都是一种“全局比较操作”。这也是为什么他们的时间复杂度都是O(n2)。

  • 相关阅读:
    软件测试七年之痒,依然热爱!我还是从前那个少年!
    我想从功能测试转向自动化测试,怎么办?
    python中的一些内置函数
    python中eval()
    集合
    列表的切片:取出来还是一个列表,可用在复制列表元素的操作
    字符串常用的方法
    dict字典,以及字典的一些基本应用
    list列表(也叫数组),以及常用的一些方法
    jsonpath的用法
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/10809318.html
Copyright © 2020-2023  润新知