一、冒泡排序
1.1、冒泡的原理
-
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
-
2.1、冒泡排序的代码实现
def bubble_sort(seq): count=len(seq) for i in range(0,count): for j in range(i+1,count): if seq[i]>seq[j]: seq[i],seq[j]=seq[j],seq[i] return seqseq=[4,5,2,1,6,3]print(bubble_sort(seq))
3.1、冒泡排序的时间复杂度
1、最好情况:若文件的初始状态是正序的,一趟扫描即可完成排序,这是冒泡排序的最优情况时间复杂度o(n)
2、最坏情况:若初始文件是反序的的,则冒泡排序需要两层循环,这是最坏情况时间复杂度o(n^2)
3、平均时间复杂度o(n^2)
二、快排
2.1 快排原理
快排是冒泡排序的改进,抽取第一个值作为比较值,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比比较值小,另一部分比比较值大,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以进行,最后将分开的来两部分加比较值合并到一起,完成排序。
2.2 快排的代码实现
def quck_sort(seq): if seq==[]: return [] else: pivot=seq[0] low_list=quck_sort([x for x in seq if xpivot])#比比较值大的部分递归排序 return low_list+[pivot]+upper_list #将三者进行合并,注意将比较值转换成列表print(quck_sort(seq))
2.3 快排的时间复杂度
1、最优情况:比较值刚好将列表分成等分了两部分,时间复杂度o(nlogn)
2、最坏情况:每次递归比较值都是最小值,导致列表分开不均衡,时间复杂度o(n^2)
3、平局时间复杂度o(nlogn)