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

#                 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]

#                 left.append(li[i])

#             else:#如果当前元素大于等于所取的元素(mid),则把他放到mid的右边。

#                 right.append(li[i])

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

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

你可能感兴趣的:(排序算法,数据结构,算法,python)