本文简单总结一下三大排序算法,如有不足,请多多提意见。。。。。。
一、冒泡排序(Bubble sort)
简述:从小到大排序,每次比较两个元素,看他们的顺序有没有错,如果错了就换过来。
1:算法步骤
a:比较ABC....元素,如果第一个比第二个大,则将两个元素交换位置 BAC...,再依次将A和C进行比较。
b:对每一对相邻的元素做同样的工作,从第一对到最后一对。这一次执行完,最后一个元素是最大的元素。
c:重复以上a、b、c步,直到每个元素都不需要交换位置为止
2:效率
在所有数据都是正序的时候,冒泡排序最快(都排好序了,目的已达到)。
当所有数据都排反序的时候最慢。
二、选择排序
简述:第一遍循环找到最小的元素放到第一位,第二次循环找到一个第二小元素,放到第二位,以此完成排序。在每次循环中,先把第一个元素标记为最小元素,然后将它与其后面的元素比较,发现比它小的,就将其标记为本次循环的最小元素。O(n2),因此,这个排序算法适用于小数据集。
1:算法步骤
a:先从未排序序列中找到最小(大)元素放到起始位置
b:再从剩余未排序序列中继续寻找最小(大)元素放到已排序末位
c:重复以上a、b两步,直到排序完成
2:效率
无论什么数据进入,时间复杂度都是,时间复杂度都是O(n²),因此,这个排序适用于小数据集。
三、插入排序
简述:通过构建有序序列,对与未排序序列,从后向前扫描,逐个比较之后,插入到相应的位置上。O(n2),因此,这个排序算法适用于小数据集。
1:算法步骤
a:将第一待排序序列的第一个元素看成有序序列,将第二个元素到最后一个元素当成未排序序列
2:效率
优点1:就是第二层循环在找到合适的插入位置之后可以提前终止,同时直接使用赋值操作,不像c++中使用swap来交换位置。:
优点2:当数组为近乎有效的数组时,插入排序的效率与NlogN级别的排序算法相差无几。
优点3:而当数组是完全有序的数组时,插入排序算法的性能可以达到O(n),因为第二层循环可以直接终止,而只进行第一层循环。