排序代码

时间:2019-09-03
本文章向大家介绍排序代码,主要包括排序代码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

快速排序

def quicksort(arr, l, r):
    i = l
    j = r
    temp = arr[l]
    p = l
    while i < j:
        while (arr[j] >= temp) & (i < j):
            j -= 1
        if j > p:
            arr[p] = arr[j]
            p = j
        while (arr[i] <= temp) & (i < j):
            i += 1
        if i < p:
            arr[p] = arr[i]
            p = i
    arr[p] = temp
    if p - 1 > l:
        quicksort(arr, l, p-1)
    if p + 1 < r:
        quicksort(arr, p+1, r)


if __name__ == '__main__':
    arr = [34, 45, 12, 78, 6, 23, 89, 56, 8, 67]
    l = 0
    r = len(arr) - 1
    print("快排前:", arr)
    quicksort(arr, l, r)
    print("快排后:", arr)

冒泡排序

def bubblesort(arr):
    arr_len = len(arr) - 1
    for i in range(0, arr_len):
        for j in range(0, arr_len):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]

if __name__ == '__main__':
    arr = [34, 45, 12, 78, 6, 23, 89, 56, 8, 67]
    print("排序前:", arr)
    bubblesort(arr)
    print("排序后:", arr)

插入排序

def insertsort(arr):
    arr_len = len(arr)
    for i in range(1, arr_len):
        j = i-1
        while j >= 0:
            if arr[j+1] < arr[j]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
            j -= 1

if __name__ == '__main__':
    arr = [34, 45, 12, 78, 6, 23, 89, 56, 8, 67]
    print("排序前:", arr)
    insertsort(arr)
    print("排序后:", arr)

选择排序

def selectsort(arr):
    arr_len = len(arr)
    index = 0
    while index < arr_len:
        min_value = min(arr[index:arr_len])
        for i in range(index, arr_len):
            if arr[i] == min_value:
                arr[index], arr[i] = arr[i], arr[index]
                break
        index += 1

if __name__ == '__main__':
    arr = [34, 45, 12, 78, 6, 23, 89, 56, 8, 67]
    print("排序前:", arr)
    selectsort(arr)
    print("排序后:", arr)

归并排序

def mergesort(arr, l, r):
    if l < r:
        print(l, r)
        mid = (l + r)//2
        print(mid)
        mergesort(arr, l, mid)
        mergesort(arr, mid+1, r)
        temp_list = []
        i, j = l, mid+1
        while (i<=mid) & (j<=r):
            if arr[i] < arr[j]:
                temp_list.append(arr[i])
                i += 1
            elif arr[i] > arr[j]:
                temp_list.append(arr[j])
                j += 1
            else:
                temp_list.append(arr[i])
                temp_list.append(arr[j])
                i += 1
                j += 1
        while i <= mid:
            temp_list.append(arr[i])
            i += 1
        while j <= r:
            temp_list.append(arr[j])
            j += 1
        arr[l:r+1] = temp_list

if __name__ == '__main__':
    arr = [34, 45, 12, 78, 6, 23, 89, 56, 8, 67]
    print("排序前:", arr)
    mergesort(arr, 0, len(arr)-1)
    print("排序后:", arr)

原文地址:https://www.cnblogs.com/shnuxiaoan/p/11453138.html