冒泡排序
冒泡排序算法,是经典的排序算法之一,是一种稳定的排序算法。
算法的时间复杂度:n*n,最优情况下,复杂度为 n。
算法稳定性:在待排序的序列中,如果存在相同的数值,在排序前后,相同数值之间的相对位置(定性)不发生改变,则为稳定算法,否则就是非稳定算法。
冒泡算法的执行过程,以升序排列为例:
1、从序列一端的起始位置开始,依次比较当前位置与下一相邻位置的数值大小,如果当前位置数值大于下一相邻数,则交换二者位置,然后比较第二与第三位,第三与第四位。。。直到比较最后第二与末尾的数并根据需要交换位置,则最后一位为最大值;
2、从第一位开始按照第一步的方式,执行比较和交换,直到序列的最后第三与最后第二位的比较和交换完成,此时末二位为序列第二大的数;
3、从上过程可知,每执行完成一轮,则待比较的序列成员都会减少一个,直到只需要比较序列第一位和第二位时,完成最终的排序。
算法实现
冒泡排序的实现方法有多种,这里给出两种 容易理解的实现方法。
第一种实现方法:
def bubble1(lst):
n=len(lst)
for i in range(n-1):
for j in range(n-1-i):
if lst[j] > lst[j+1]:
lst[j+1], lst[j] = lst[j], lst[j+1]
第二种实现方法:
def bubble2(lst):
n=len(lst)
for i in range(n-1,0,-1):
for j in range(i):
if lst[j] > lst[j+1]:
lst[j+1], lst[j] = lst[j], lst[j+1]