""" 快速排序的思路: numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] 1、设keys(又称为监视哨)等于numlist=[0],i等于0,j等于len(numlist)-1,即如下: numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] | | keys=6,i=0 j 2、(1)、第一次排序的第一趟是拿numlis[j] 和keys 比较,如果numlist[j]<keys,则把numlist[j] 赋给numlist[i],如果numlist[j]>keys,则j向前移一位,即:j -= 1,在例子numlist中,第一次比较 因为keys=6,numlist[j]=6,所以j -= 1,如下所示: numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] | | keys=6,i=0 j 然后继续拿numlist[j]和keys相比,因为numlist[j]=15 > keys,所以 j -= 1,j的位置如下: numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] | | keys=6,i=0 j 此时因为numlist[j]=2 < keys , 便进行 赋值 : numlist[i] = numlist[j],完成第一次趟排序, 完成第一次趟排序后,numlist和i,j的位置如下: numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] | | i=0 j (2)、第一次排序的第二趟是拿前面开始往后搜索,如果比keys大,则赋值给numlist[j],因为此时 numlist[i]=2<keys,所以i向后移一位,即 i += 1,此时i的位置如下: numlist = [2, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] | | i=0 j 因为此时的numlist[i]=8>keys,所以进行 numlist[j]=numlist[i]运算,然后再进行 numlist[i] = keys 的运算,经过第二趟排序后,numlist如下: numlist = [2, 6, 1, 4, 3, 9, 5, 4, 11, 2, 8, 15, 6] | | i=0 j 3、继续重复2的步骤,直到i>=j,跳出第一次排序,并且返回i的值,经过第一次排序后的numlist如下: numlist = [2, 2, 1, 4, 3, 4, 5, 6, 11, 9, 8, 15, 6] 4、然后进行递归,直到排序完成 """ def quicky_sort(datalist,left,right): keys = datalist[left] i = left j = right while i<j: while i<j and datalist[j]>=keys: j -= 1 datalist[i] = datalist[j] while i<j and datalist[i]<=keys: i += 1 datalist[j]=datalist[i] datalist[i]=keys return i def tempquick(datalist1,left,right): if left<right: p = quicky_sort(datalist1,left,right) #进行递归 tempquick(datalist1,left,p-1) tempquick(datalist1,p+1,right) return datalist1 numlist = [6, 8, 1, 4, 3, 9, 5, 4, 11, 2, 2, 15, 6] print(tempquick(numlist,0,len(numlist)-1))
Python实现快速排序
最新推荐文章于 2025-04-11 18:40:01 发布