排序算法:快速排序(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])

可以看出来,再此写入的排序是有序的!

有序,指列表中元素由相同的情况下,按照的的初始索引顺序进行有序排列。。。。

经验分享 程序员 微信小程序 职场和发展