python中的快速排序算法的理解
快速排序的方法采用分治法,其原理是在已知数组中选取第一个数为基准数,接下来是排序过程,将比基准数小的数放到它左边,比基准数大的不动,然后经过一次排序,左边部分的数都比基准数小,右边的都比基准数大,然后对左右两边分别进行同样的排序。直到最后只剩下一个数字。
例:list=[6,8,-2,3,7,1,10]
1:根据上述方法以第一个index为排序的基准数,然后将列表中比它小的数都移动到左边,比它大的数不移动,得到一个新的列表[-2,3,1,6,8,7,10]
注意:它左边的数字还是保持了相对顺序,比如-2还是在3的左边。
2:通过一次排序之后,我们已经知道了在数字6的左边,都是比6小的数,在6的右边都是比6大的数,在排序过程中我们的基准数还是6,现在我们需要把6左右的数组分成两个子列表,即左[-2,3,1]和右[8,7,10],然后对这两个子列表重复上述排序,对[-2,3,1]同理进行排序可以得到[-2,3,1],此处,因为当前基准数为-2,而它右边的3和1都比它大,所以列表不变化,应重新定义新的基准数,定义右边第一个数为基准数,同理进行排序,比1小的数放到它左边,比1大的数放到它右边,得到[-2,1,3],其次,还需将[8,7,10]同理进行排序,得到[7,8,10],最后,得到[-2,1,3,6,7,8,10],排序完成。
def quick_sort(list_,start,end):
if start>=end:
return
cmp_index=start
for i in range(start+1,end):
if list_[i]<list_[cmp_index]:
tmp=list_[i]
del list_[i]
list_.insert(cmp_index, tmp)
cmp_index+=1
quick_sort(list_,start=start,end=cmp_index-1)
quick_sort(list_,start=cmp_index+1,end=len(list_))
num=[6,8,-2,3,7,1,10]
quick_sort(num,0,len(num))
print(num)