常用排序算法总结(python)之冒泡排序

排序算法简介

我们通常所说的排序算法是指内部排序算法,即数据记录在内存中进行排序

排序算法大体可分为两种:
     一种是比较排序,时间复杂度O(nlogn)~O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。
     另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。

下面介绍比较排序算法.

比较排序算法的性能表

排序方法 平均情况 最好情况 最坏情况 辅助空间 稳定性
冒泡排序 O(n^2) O(n) O(n^2) O(1) 稳定
简单选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定
直接插入排序 O(n^2) O(n) O(n^2) O(1) 稳定
希尔排序 O(nlogn)~O(n^2) O(n^1.3) O(n^2) O(1) 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
快速排序 O(nlogn) O(nlogn) O(n^2) O(nlogn)~O(n) 不稳定

     有一点容易忽略的是排序算法的稳定性(腾讯校招2016年笔试题曾考过)
     排序算法稳定性的简单形式定义为:如果Ai=Aj,排序前Ai在Aj之前,排序后保持Ai在前,Aj在后,则称此种排序算法是稳定的。换句话说,即是保证前后两个相等的数的相对位置不变。
     排序算法是否稳定的是由具体算法决定的,不稳定的算法在某种条件下可以变成稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。例如对于冒泡排序,原本稳定的排序算法,如果将记录交换的条件改成A[i]>=A[i+1],则两个相等的记录就会交换位置,从而变成不稳定的排序算法。
     排序算法稳定性的好处:排序算法稳定,前一个键上排序的结果可为后一个键所用。

冒泡排序(Bubble Sort)

     冒泡排序算法比较简单易学,其思路是:遍历所有元素,依此比较相邻两个元素,如果他们的顺序不满足设定的要求,交换它们的位置,直到没有元素需要交换,排序完成。此算法的名称由来是因为越小(或越大)的元素经由交换慢慢“浮”到数列的顶端。
如下是冒泡算法排序的代码(python):
冒泡算法升序排序
@someone
def bubbleSortA(data):
   for i in range(0,len(data)):
    for j in range(0,len(data)-1):
       if data[j]>data[j+1]:
           data[j],data[j+1]=data[j+1],data[j]
   return data
冒泡算法绛序排序
def bubbleSortA(data):
   for i in range(0,len(data)):
    for j in range(0,len(data)-1):
       if data[j+1]>data[j]:
           data[j],data[j+1]=data[j+1],data[j]
   return data

上述代码对序列data=[6,5,3,1,8,7,2,4]的结果分别为:
In: data=[6,5,3,1,8,7,2,4]
In: bubbleSortA(data)
Out: [1,2,3,4,5,6,7,8]
In: bubbleSortJ(data)
Out: [8,7,6,5,4,3,2,1]

动态效果如图:这里写图片描述这里写图片描述

参考博客链接:http://www.cnblogs.com/eniac12/p/5329396.html

猜你喜欢

转载自blog.csdn.net/weixin_39441762/article/details/81605932