排序算法:快速排序(python写法)
快速排序:
直接将所取的元素放到他应该在的位置。 做法:新建一个左列表,存取所有比当前元素小的元素。 再新建一个右列表,存取所有比当前元素大的元素。 对左列表和右列表分别再进行快速排序(也就是递归。递归的两个要素:调用自身,结束条件) 空间复杂度:O(n+log(2,n)) 时间复杂度:O(n*log(2,n))
时间复杂符和空间复杂度可以看前边文章插入排序有所提及。。。。。。
快速排序(python代码):
def quick_sort(li):
if len(li) <= 1:
return li
else:
left = []
right = []
mid = li[0]
for i in range(1,len(li)):
if mid > li[i]:
left.append(li[i])
else:
right.append(li[i])
return quick_sort(left) + [mid] +quick_sort(right)
print(li1)
print(quick_sort(li1))
快速排序代码注释:
# def _quick_sort(li):#快速排序
# if len(li)>1:#递归持续的条件:li还有两个或者两个以上的元素,还值得进行一次快速排序。
# left=[]#初始化左列表
# right=[]#初始化右列表
# mid=li[0]#取第一个元素来进行比较,放到中间。
# for i in range(1,len(li)):#要从第二个元素开始与所取的元素(mid)进行比较
# if li[i]<mid:#如果当前元素小于所取的元素(mid),则把他放到mid的左边
# left.append(li[i])
# else:#如果当前元素大于等于所取的元素(mid),则把他放到mid的右边。
# right.append(li[i])
# return _quick_sort(left)+[mid]+_quick_sort(right)#进行递归,返回排序号的结果。
# else:#如果li的长度小于等于1
# return li
注意,我在这写的快速排序是稳定的。传统的快速排序是不稳定的。
根据判断语句:
# if li[i]<mid:#如果当前元素小于所取的元素(mid),则把他放到mid的左边
# left.append(li[i])
# else:#如果当前元素大于等于所取的元素(mid),则把他放到mid的右边。
# right.append(li[i])
可以看出来,再此写入的排序是有序的!
有序,指列表中元素由相同的情况下,按照的的初始索引顺序进行有序排列。。。。