1.选择排序
和冒泡排序差不多,也是选择最小的放在最前面,只是他不交换位置。
class Solution(object):
def sortArray(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n=len(nums)
for i in range(n-1):
min_index=i
for j in range(i+1,n):
if nums[j]<nums[min_index]:
min_index=j
nums[i],nums[min_index]=nums[min_index],nums[i]
return nums
2.堆排序
首先要明白什么是最大堆或者最小堆。
https://www.cnblogs.com/chengxiao/p/6129630.html
https://www.cnblogs.com/chengxiao/p/6129630.html
解释的很好,就不在解释了,上代码。
def _HeapSort(nums):
n=len(nums)
last=n-1
par_node=n//2-1
for i in range(par_node,-1,-1):
build_max_heap(nums,i,n-1)
for i in range(n-1,0,-1):
nums[0],nums[i]=nums[i],nums[0]
build_max_heap(nums,0,i-1)
return nums
def build_max_heap(nums,par_node,hi):
#至少有一个左孩子结点
child_node=par_node*2+1
while child_node<=hi:
if child_node<hi and nums[child_node]<nums[child_node+1]:
child_node=child_node+1
if nums[child_node]>nums[par_node]:
nums[child_node],nums[par_node]=nums[par_node],nums[child_node]#交换完毕,要检测该交换的结点的子节点是否继续满足最大堆
par_node=child_node
child_node=par_node*2+1
else:
break