Quick_Sort
简介:快速排序是冒泡排序的一种改进,通过一趟排序将数据分割成独立的两部分,其中一部分的所有数据比另一部分都要小,然后按此方法对两部分进行快速排序。整个排序过程可以递归进行,直至最终序列为有序序列。
特点:每一趟排序可以确定一个数字的最终位置。
原理:(1)从数据中选取基准
(2)分区,小于基准的数据移到左边,大于基准的数据移到右边
(3)对基准左右两个子集,重复步骤一、二
实现:挖坑法
选取4为基准,左右两个指针,先比较右边指针所指数字1与4的大小,1<4, 所以将1填到4处,1处挖坑;然后左指针后移,并比较左指针所指数字7与4的大小,7>4,所以将7填到右指针所挖坑处,7处挖坑,然后右指针前移,并比较右指针所指数字与基准数字的大小,重复上述步骤,直至左右指针相遇。
代码如下:
#快速排序
def quick_sort(nums, l, r):
if l < r:
base = partition(nums, l, r)
quick_sort(nums, l, base-1)
quick_sort(nums, base+1, r)
def partition(nums, l, r):
base = nums[l]
while l < r:
while l < r and base <= nums[r]:
r -= 1
nums[l] = nums[r]
while l < r and base >= nums[l]:
l += 1
nums[r] = nums[l]
nums[l] = base
return l
nums = [7,0,0,2,4,3]
l = 0
r = len(nums)-1
if __name__ == "__main__":
quick_sort(nums, l, r)
print(nums)
#输出[0, 0, 2, 3, 4, 7]
分析:快排的平均时间复杂度是nlog(n),最坏情况下的时间复杂度是n*n。