快速排序(简称快排)的核心思想是分治,关键两个要素,一是中心点,二是分区。将list的第一个元素选定为中心点pivot,将list中所有小于pivot的元素统统放到pivot的左边,大于(等于)pivot的元素放到pivot的右边。此时,pivot处于list的值的中心位置,pivot的位置已经排好了。然后在左边和右边采用递归调用,重复此过程,就可以将list排好。
python代码实现(兼容Java版本):
def quick_sorted(nums):
# print("nums is: " + str(nums), end = " ")
if(len(nums) <= 1):
# print()
return nums
i,j = 0, len(nums)-1
pivot = nums[0]
# print(" pivot is: " + str(pivot), end = " ")
leftlist = []
#注意在遍历nums时,要把pivot自身跳过去,这样就可以处理有重复元素的问题。因为pivot是nums【0】,所以从下标1开始遍历
for i in nums[1:]:
if(i<pivot):
leftlist.append(i)
rightlist = []
for i in nums[1:]:
if(i>=pivot):
rightlist.append(i)
# print("left is: " + str(leftlist), end=" —— ")
# print("right is: " + str(rightlist))
left = quick_sorted(leftlist)
right = quick_sorted(rightlist)
return left + [pivot] + right
Python简化版:
def quick_sorted(nums):
if(len(nums) <= 1):
return nums
pivot = nums[0]
left = quick_sorted([x for x in nums[1:] if x < pivot])
right = quick_sorted([x for x in nums[1:] if x >= pivot])
return left + [pivot] + right