排序算法-冒泡排序(python)
算法实现
对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。
给定一个int数组A及数组的大小n,请返回排序后的数组。
测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]
-- coding:utf-8 --
class BubbleSort:
def bubbleSort(self,A, n):
for j in xrange(n-1,0,-1):
for i in xrange(j):
if A[i] > A[i+1]:
A[i] , A[i+1] = A[i+1] , A[i]
return A
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Created by xuehz on 2017/8/22
class BubbleSort:
def bubble_sort(self, alist):
for j in xrange(len(alist)-1, 0, -1): #n-1 n-2 ... 1
# j表示每次遍历需要比较的次数,是逐渐减小的
for i in xrange(j):
if alist[i] > alist[i+1]:
alist[i], alist[i+1] = alist[i+1], alist[i]
def bubble_sort1(self, alist):
n = len(alist)
for j in xrange(n-1):
count = 0 #此时为最优时间复杂度 O(n)
for i in xrange(n-1-j):
if alist[i] > alist[i+1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if 0 == count:
return alist
return alist
"""
j = 0 i :0~n-2 range(0,n-1)
j = 1 i :0~n-3 range(0,n-1-1)
j = 2 i :0~n-4 range(0,n-1-2)
j = n i range(0,n-1-n)
"""
if __name__ == '__main__':
li = [54,26,93,17,77,31,44,55,20]
B = BubbleSort()
B.bubble_sort(li)
print li
算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端
冒泡排序算法的运作如下:
比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
那么我们需要进行n-1次冒泡过程,每次对应的比较次数如下图所示:
时间复杂度
- 最优时间复杂度:O(n) (表示遍历一次发现没有任何可以交换的元素,排序结束。)
- 最坏时间复杂度:O(n2)
- 稳定性:稳定