快速排序
思路1: 将数字第一个拿出来,然后从右边往左边找第一个比基准值小的挪到左边,同理挪动左边的
def q_sort(arr, left, right):
if left >= right:
return arr
temp = arr[left]
i = left
j = right
while(i < j ):
while(i < j and arr[j] >= temp):
j = j -1
arr[i] = arr[j]
while (i < j and arr[i] <= temp):
i = i + 1
arr[j] = arr[i]
arr[i] = temp
q_sort(arr, left, i - 1)
q_sort(arr, i + 1, right)
思路二:
将数字第一个挪出来 作为基准值,从数组第二个位置开始遍历,同时开始计数比基准值小的数量,将比基准值小的挪动到累加计数位置,最后置换第一个基准值和最后一个计数位置,这样小的数全在左边,大的全在右边(JDK自带的快速排序为第二种写法)
def q_sort3(arr, left, right):
if left >= right:
return arr
index = left
for i in range(left + 1, right + 1):
if arr[left] >= arr[i] :
index = index + 1
arr[index], arr[i] = arr[i], arr[index]
arr[left], arr[index] = arr[index], arr[left]
q_sort3(arr, left, index -1)
q_sort3(arr, index + 1 , right)
浙公网安备 33010602011771号