根据根本思惟,只有在两个元素的次序与排序请求相反时才将改换它们的地位,不然保持不变,所以冒泡排序时稳定的。时光复杂度为平方阶O(n2),空间复杂度为O(l)。
Python源代码:
- #-------------------------冒泡排序--------------------------------
- def bubble_sort(data_list):
- length = len(data_list)
- #序列长度为length,须要履行length-1轮交换
- for x in range(1,length):
- #对于每一轮交换,都将序列傍边的阁下元素进行比较
- #每轮交换傍边,因为序列最后的元素必定是最大年夜的,是以每轮轮回到序列未排序的地位即可
- for i in range(0,length-x):
- if data_list[i] > data_list[i+1]:
- temp = data_list[i]
- data_list[i] = data_list[i+1]
- data_list[i+1] = temp
2.3.2 快速排序
快速排序是对冒泡排序本质上的改进。
核心思惟:是一个当场排序,分而治之,大年夜范围递归的算法。即:经由过程一趟扫描后确保基准点的┞封个数据元素的左边元素都比它小、右边元素都比它大年夜,接着又以递归办法处理阁下两边的元素,直到基准点的阁下只有一个元素为止。
Python源代码:
- #-------------------------快速排序--------------------------------
- #data_list:待排序的序列;start排序的开端index,end序列末尾的index
- #对于长度为length的序列:start = 0;end = length-1
- def quick_sort(data_list,start,end):
- if start < end:
- i , j , pivot = start, end, data_list[start]
- while i < j:
- #大年夜右开端向左寻找第一个小于pivot的值
- while (i < j) and (data_list[j] >= pivot):
- j = j-1
- #将小于pivot的值移到左边
- if (i < j):
- data_list[i] = data_list[j]
- i = i+1
- #大年夜左开端向右寻找第一个大年夜于pivot的值
- while (i < j) and (data_list[i] < pivot):
- i = i+1
- #将大年夜于pivot的值移到右边
- if (i < j):
- data_list[j] = data_list[i]
- j = j-1
- #轮回停止后,解释 i=j,此时左边的值全都小于pivot,右边的值全都大年夜于pivot
- #pivot的地位移动精确,那么此时只需对阁下两侧的序列调用此函数进一步排序即可
- #递归调用函数:依次对左侧序列:大年夜0 ~ i-1//右侧序列:大年夜i+1 ~ end
- data_list[i] = pivot
- #左侧序列持续排序
- quick_sort(data_list,start,i-1)
- #右侧序列持续排序
- quick_sort(data_list,i+1,end)
2.4归并排序
核心思惟:把数据序列递归地分成短序列,即把1分成2、2分成4、依次分化,当分化到只有1个一组的时刻排序这些分组,然后依次归并回本来的序列,赓续归并直到原序列全部排好次序。
推荐阅读
Android中内存优化的那些事 - 一个有关图片的优化记录
客服群里叫唤着:这个用户图片不显示了,那个用户图片也不显示了。我拿着手上一切正常的测试机,what the hell……默默地打开bugly。 满园春色关不住,遍地内存溢出来!是的,>>>详细阅读
本文标题:常用排序算法比较与分析
地址:http://www.17bianji.com/lsqh/35003.html
1/2 1