1. 思路
- 从序列中任选一个元素(temp)作为中间数,
- 列表分为两部分,把所有比 temp小的数移动到它的左边,再所有比 temp大的数移动到它的右边(简单理解:左边都比temp小,右边都比temp大)
- 分别对左右两部分进行递归,直到左右两部分剩余一个元素
2. 举例
比如现在有列表: a = [6,7,4,1,8,5,3,9,2]
- 先从列表中找 6 作为中间数,将列表分为两部分(6的左边比6小,右边比6大)
- 对于左半部分,重复第一步的操作
- 右半部分也是一样
3. 详细步骤分析
列表: a = [6,7,4,1,8,5,3,9,2]
- 先从列表中找 6 作为中间数,将列表分为两部分(6的左边比6小,右边比6大)
2. 左半部分
1. 在 [2, 3, 4, 1, 5, 6, 8, 9, 7] 基础上进行的
2. 左半部分为 2,3,4,1,5
3. 选择第一个元素 2 作为temp,将剩余元素分为 [1,2] 和 [4,3,5] 两个部分
1,2,4,3,5 的右半部分 [4,3,5] 3. 右半部分
4. 代码实现
def fun(data,left,right):
temp = data[left]
print('temp:',temp)
while left < right:
while left < right and data[right]>=temp:
right -=1
data[left] = data[right]
print(data,'right right下标:',right)
while left<right and data[left]<=temp:
left+=1
data[right] = data[left]
print(data,'left left 下标:',left)
data[left] = temp
print('temp归位:{} temp下标{}:'.format(data,left))
return left
def quick_sort(data,left,right):
if left<right:
mid=fun(data,left,right)
print('----------------------')
quick_sort(data,left,mid-1)
quick_sort(data,mid+1,right)
a = [6,7,4,1,8,5,3,9,2]
print('排序前:',a)
quick_sort(a,0,len(a)-1)
print('排序后:',a)
def quick_sort(data):
if len(data) < 2:
return data
else:
temp = data[0]
less = [i for i in data[1:] if i <= data[0]]
greater = [i for i in data[1:] if i > data[0]]
print(less + [temp] + greater)
return quick_sort(less) + [temp] + quick_sort(greater)
a = [6,7,4,1,8,5,3,9,2]
print(quick_sort(a))
|