Implementação de código de classificação rápida em Python

A classificação rápida
é uma melhoria do algoritmo de classificação por bolha. Divida os dados a serem classificados em duas partes independentes por classificação. Todos os dados em uma parte são menores do que todos os dados na outra parte. Então, de acordo com este método, as duas partes dos dados podem ser classificadas rapidamente. Todo o processo de classificação pode ser recursivamente, de modo que todos os dados se tornem uma sequência ordenada

1. Escolha o valor de referência: escolha um elemento da sequência, chamado "pivô"
2. Segmentação: reordene a sequência, todos os elementos menores do que o valor de referência são colocados na frente da referência e todos os elementos maiores que o valor de referência são colocados na frente do benchmark Coloque-o atrás do benchmark (o número igual ao benchmark pode ir para qualquer lado). Após esta segmentação terminar, a classificação do valor de referência foi concluída;
3. Classifique recursivamente as subsequências: classifique recursivamente as subsequências de elementos menores que o valor de referência e as subsequências de elementos maiores que o valor de referência.

A condição de julgamento para recursão para o fundo é que o tamanho da sequência seja zero ou um, neste momento a sequência obviamente já está em ordem.

Existem vários métodos específicos para selecionar o valor de referência e este método de seleção tem um impacto decisivo no desempenho do tempo de classificação.

def parttion(arr,low,high):
    # 最小元素索引
    i = (low-1)
    pivot = arr[high]

    for j in range(low,high):

        # 当前元素小于等于pivot
        if arr[j] <= pivot:

            i += 1
            arr[i],arr[j] = arr[j],arr[i]

    arr[i+1],arr[high] = arr[high],arr[i+1] 
    return ( i+1 )     


# arr[]  排序数组
# low   起始索引
# high  结束索引

# 快速排序排序函数
def quickSort(arr,low,high):
    if low < high:
        pi = parttion(arr,low,high)

        quickSort(arr,low,pi-1)
        quickSort(arr,pi+1,high)

arr = [10,7,9,1,5]
n = len(arr)
quickSort(arr,0,n-1)
print("排列后的数组:",arr)

Acho que você gosta

Origin blog.csdn.net/weixin_45598506/article/details/113850649
Recomendado
Clasificación