Reborn's Blog

排序算法(Python实现)

2019-03-15·Algorithm, Sorting, Python

冒泡排序

def bubbleSort(arr):
    l = len(arr)
    for i in range(l - 1):
        for j in range(l - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr

快速排序

def quickSort(arr, left, right):
    if left >= right:
        return
    partitionIndex = partition(arr, left, right)
    quickSort(arr, left, partitionIndex - 1)
    quickSort(arr, partitionIndex, right)
    return arr

def partition(arr, left, right):
    pivot = arr[right]
    i = left
    for j in range(left, right):
        if arr[j] < pivot:
            arr[i], arr[j] = arr[j], arr[i]
            i += 1
    arr[i], arr[right] = arr[right], arr[i]
    return i

归并排序

def merge(arr, left, right):
    result = []
    mid = (left + right) >> 1
    leftIndex, rightIndex = left, mid + 1
    while leftIndex <= mid and rightIndex <= right:
        if arr[leftIndex] < arr[rightIndex]:
            result.append(arr[leftIndex])
            leftIndex += 1
        else:
            result.append(arr[rightIndex])
            rightIndex += 1
    while leftIndex <= mid:
        result.append(arr[leftIndex])
        leftIndex += 1
    while rightIndex <= right:
        result.append(arr[rightIndex])
        rightIndex += 1
    for i in range(left, right + 1):
        arr[i] = result[i - left]

def mergeSort(arr, left, right):
    if left >= right:
        return
    mid = (left + right) // 2
    mergeSort(arr, left, mid)
    mergeSort(arr, mid + 1, right)
    merge(arr, left, right)
    return arr
#Algorithm#Sorting#Python