2.快速排序
2.1 算法思想
快速排序是对冒泡排序的一种改进。通过一次排序(
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一次快速排序
)将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序的时间复杂度为o(nlogn),空间复杂度为o(nlogn)
2.2 算法过程
- 从数列中挑出一个元素,称为 “基准”(pivot),通常选取数组的第一个数;
- 遍历数组,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边,因此这不是稳定的排序算法)。分区完成之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
- 递归把小于基准值元素的子数列和大于基准值元素的子数列排序,具体过程合步骤1、2一样。
2.3 python实现
def
quickSort
(
numList
)
:
n
=
len
(
numList
)
if
n
==
0
or
n
==
1
:
return
numList
pivot
=
numList
[
0
]
left
=
[
]
right
=
[
]
for
i
in
range
(
1
,
n
)
:
# 分区
if
numList
[
i
]
<
pivot
:
left
.
append
(
numList
[
i
]
)
else
:
right
.
append
(
numList
[
i
]
)
return
quickSort
(
left
)
+
[
pivot
]
+
quickSort
(
right
)
# 对左右两个子数组粉笔进行快排,并连同基准值一块返回
numlist
=
[
3
,
2
,
5
,
6
,
7
,
4
,
1
,
8
]
print
(
quickSort
(
numlist
)
)
# 输出结果为:[1,2,3,4,5,6,7,8]