快速排序(选择排序)
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
算法:
1.将比index值小的放到左边,比index值大的放到右边;
2.递归比较,直至所有都排序完成
python代码:
def quickSort(nums,left,right):
#递归退出条件
if left>=right:
return
#设置起始的基准元素值
mid = nums[left]
#low为序列左边,在开始位置的由左向右移动的游标
low = left
#high为序列右边,在开始位置的由右向左移动的游标
high = right
while low < high:
while low <high and nums[high] >= mid:
high -= 1
nums[low] = nums[high]
#走到此位置时high指向一个比基准元素小的元素,将high指向的元素放到low的位置上,此时high指向的位置空着,接下来移动low找到符合条件的元素放在此处
# 如果low与high未重合,low指向的元素比基准元素小,则low向右移动
while low < high and nums[low]<mid:
low += 1
nums[high] = nums[low]
# 此时low指向一个比基准元素大的元素,将low指向的元素放到high空着的位置上,此时low指向的位置空着,之后进行下一次循环,将high找到符合条件的元素填到此处
# 退出循环后,low与high重合,此时所指位置为基准元素的正确位置,左边的元素都比基准元素小,右边的元素都比基准元素大
nums[low] = mid
quickSort(nums,left,low-1)
quickSort(nums,low+1,right)