基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
快速排序采用分治算法,算法步骤如下:
1.两个指针left,right分别指向列表的第一个元素和最后一个元素,然后取一个参考值,默认为第一个列表的第一个元素(也可以取最后一个),称为Key
2.然后right指向的值先和参考值Key进行比较,若list[right]大于或等于Key,right就一直向左移动,right-1,直到移动到小于Key值的位置
3.left指向的值和参考值Key进行比较,若list[left]小于Key,left就一直向右移动,left+1,直到移动到大于Key位置
4.此时,left和right若还没有相遇,即left还小于right,则二者指向的值互换
5.若已经相遇则说明,第一次排序已经完成,将list[right]与list[0]的值进行互换,进行之后的递归
6.然后针对左右两边序列进行上述步骤,重复直至排序完成
博主使用python实现代码如下:
def QiuckSort(s):
return quicksort(s,0,len(s)-1)
def quicksort(s,left,right):
if left>=right:
return s
key = s[left]
lep = left
rip = right
while lep <rip:
while s[rip]>=key and lep <rip:
rip -=1
while s[lep]<=key and lep <rip :
lep +=1
s[lep],s[rip]=s[rip],s[lep]
s[left],s[rip]=s[rip],s[left]
print(s)
quicksort(s,left,lep-1)
quicksort(s,rip+1,right)
return s
s=[2,99,7,55,85,24,45,36]
print(s)
QiuckSort(s)
print(s)