python实现排序算法

经常忘,每次都要从网上查一下,每次查的都不一样,还是记录一下吧

1、选择排序

从一堆数中选择最小的,往前放

def selectSort(arr):
    for i in range(len(arr)-1):
        key = i
        for j in range(i+1,len(arr)):
            if(arr[j] < arr[key]):
                key = j
        if key != i:
            arr[key],arr[i] = arr[i],arr[key]

    return arr

2、冒泡排序

最大的浮起来,放到最后;重点:相邻元素比较,交换

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

3、插入排序

后面的数据按照顺序往前插入

def insertSort(arr):
    for i in range(1,len(arr)):
        temp = arr[i]
        j = i - 1
        while (j >= 0 and arr[j] > temp):
            arr[j + 1] = arr[j]
            j -= 1

        arr[j + 1] = temp
    return arr

4、快速排序(面试重点)

找一个基准值,二分,比它大的放后面,比它小的放前面,重复多次,直到不能二分为止

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

 

5、归并排序(面试重点)

先切,切到一个数为一组,再合并,合并过程按大小排序

def mergeSort(arr):
    if len(arr) < 2:
        return arr
    mid = len(arr) // 2
    left = mergeSort(arr[:mid])
    right = mergeSort(arr[mid:])
    return merge(left,right)

def merge(a,b):
    c = []
    i = j = 0
    while i < len(a) and j < len(b):
        if a[i] < b[j]:
            c.append(a[i])
            i += 1
        else:
            c.append(b[j])
            j += 1
    c.extend(a[i:])
    c.extend(b[j:])
    return c

print(mergeSort(arr))

 

posted @ 2020-05-21 10:29  植入代码  阅读(223)  评论(1编辑  收藏  举报