标签:
1.冒泡排序:比较相邻的的两个元素,并将大(小的)往后(前)移动。
实现代码:
def asc(ary): n=len(ary) for i in range(n): for j in range(0,n-i-1): if not less(ary[j],ary[j+1]): ary[j],ary[j+1]=ary[j+1],ary[j] return ary def desc(ary): n=len(ary) for i in range(0,n): for j in range(n-2,i-1,-1): if less(ary[j],ary[j+1]): ary[j],ary[j+1]=ary[j+1],ary[j] return ary def less(value1,value2): return value1<value2
分类 | 排序算法 |
---|---|
数据结构 | 数组 |
最差时间复杂度 | |
最优时间复杂度 | |
平均时间复杂度 | |
最差空间复杂度 | 总共,需要辅助空间 |
2.堆排序
堆排序在 top K 问题中使用比较频繁。堆排序是采用二叉堆的数据结构来实现的。该结构虽然实质上还是一维数组但近似完全二叉树 并同时满足堆积性质:父节点的值大于(小于)子节点的值。
访问相关节点:
对于大小为n的一维数组,数组中的下标为1~n-1
堆中定义以下几种操作:
实现代码:
1 def heap_sortasc(ary): 2 n=len(ary) 3 first=int(n/2)-1#z最后一个非叶子节点 4 for start in range(first,-1,-1):#构造大根堆 5 max_heapify(ary,start,n) 6 for end in range(n-1,-1,-1):#堆排,将大根堆转换成有序数组 7 ary[end],ary[0]=ary[0],ary[end] 8 max_heapify(ary,0,end) 9 return ary 10 #最大堆调整,将堆的末端子节点作调整,使得子节点永远小于父节点 11 #start为当前需要调整 12 #递归实现 13 def max_heapify(ary,root,size): 14 while True: 15 child=root*2+1#调整节点的子节点 16 if root<int(size/2): 17 if child+1<size and less(ary[child],ary[child+1]): 18 child=child+1#取较大的子节点 19 if less(ary[root],ary[child]):#较大的子节点成为父节点 20 ary[root],ary[child]=ary[child],ary[root]#变换 21 root=child 22 else: 23 break 24 else: 25 break 26 def heap_sortdesc(ary): 27 n=len(ary) 28 first=int(n/2)-1#z最后一个非叶子节点 29 for start in range(first,-1,-1):#构造小根堆 30 min_heapify(ary,start,n) 31 for end in range(n-1,-1,-1):#堆排,将小根堆转换成有序数组 32 ary[end],ary[0]=ary[0],ary[end] 33 min_heapify(ary,0,end) 34 return ary 35 #最小堆调整,将堆的末端子节点作调整,使得子节点永远大于父节点 36 #start为当前需要调整 37 #递归实现 38 def min_heapify(ary,root,size): 39 while True: 40 child=root*2+1#调整节点的子节点 41 if root<int(size/2): 42 if child+1<size and less(ary[child],ary[child+1])==False: 43 child=child+1#取较小的子节点 44 if less(ary[root],ary[child])==False:#较小的子节点成为父节点 45 ary[root],ary[child]=ary[child],ary[root]#变换 46 root=child 47 else: 48 break 49 else: 50 break 51 def less(value1,value2): 52 return value1<value2
算法复杂度:
分类 | |
---|---|
数据结构 | 数组 |
最差时间复杂度 | |
最优时间复杂度 | |
平均时间复杂度 | |
最差空间复杂度 | total, auxiliary |
标签:
原文地址:http://www.cnblogs.com/bzsh/p/4474301.html