快速排序

思路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)

  

原文地址:https://www.cnblogs.com/chengxin1982/p/14839021.html