Python实现交换排序--冒泡排序和快速排序

1.冒泡排序也叫起泡排序,气泡排序。
基本思路(升序为例):比较第一个和第二个,逆序(data[0]>data[1])则交换,然后比较第二个和第三个,如此下去完成第一趟排序,这样最大的元素被安排到最后一个位置n;第二趟排序对前n-1个元素进行上述操作,第二大的元素排在n-1的位置;
最大比较次数n(n-1)/2 。时间复杂度为O(n**2) 冒泡排序是稳定的。

#升序例子
def mppx(datas):
	length = len(datas)
	for i in range(length - 1):
		for j in range(length - 1 - i):
				if datas[j] > datas[j+1]:
					temp = datas[j]
					datas[j] = datas[j+1]
					datas[j+1] = temp
	print datas
#降序例子
def bubble_sort(datas):
	length = len(datas)
	for i in range(length - 1, 0 , -1):  
		for j in range(i):
			if datas[j+1] > datas[j]:
				temp = datas[j+1]
				datas[j+1] = datas[j]
				datas[j]= temp
	print datas


datalist = [60,71,49,11,82,49,24,3,66]
mppx(datalist)
bubble_sort(datalist)
输出:
[3, 11, 24, 49, 49, 60, 66, 71, 82]
[82, 71, 66, 60, 49, 49, 24, 11, 3]

2.快速排序
快速排序中,记录的比较和交换从两端向中间进行,关键字较小和较大的记录一次就能换到前面或者后面,记录每次移动的距离较远,所以可以减少总的比较次数和移动次数。是目前基于比较的内部排序方法中速度最快的。
平均时间复杂度:O(nlogn),最坏情况下的时间复杂度为O(n**2)
快速排序法不稳定。例如{6,6‘,2}的排序结果为{2,6’,6}

快速排序
quick_sort = lambda array: array if len(array) <= 1 else \
			quick_sort([item for item in array[1:] if item <= array[0]]) \
			+ [array[0]] + \
			quick_sort([item for item in array[1:] if item > array[0]])

datalist = [60,71,49,11,82,49,24,3,66]
print quick_sort(datalist)
输出:
[3, 11, 24, 49, 49, 60, 66, 71, 82]
报错。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
def quick_sort(datas):
	if datas == []:
		return
	else:
		smaller = [x for x in datas[1:] if x <= datas[0]]
		bigger = [x for x in datas[1:] if x > datas[0]]
		return quick_sort(smaller) + [datas[0]] + quick_sort(bigger)
datalist = [60,71,49,11,82,49,24,3,66]
print quick_sort(datalist)

参考连接:
https://blog.csdn.net/razor87/article/details/71155518
https://www.cnblogs.com/lovealways/p/6716113.html

你可能感兴趣的:(Python数据结构)