排序算法练习 [python]

快排

def quicksort(L,low,high):
    if low < high :
        pivot = partition(L,low,high)
        quicksort(L,low,pivot-1)
        quicksort(L,pivot+1,high)
    return L

def partition(L,low,high):
    pivot = L[low]
    while low<high :
        while pivot<=L[high] and low<high :
            high -= 1
        if low < high:
            L[low] = L[high]
            low += 1
        while pivot>=L[low] and low<high :
            low += 1
        if low < high:
            L[high] = L[low]
            high -= 1
    L[low] = pivot
    return low

插入排序:i从1到n循环,循环一次将前i个数排好序,第i+1次循环,比L[i+1]大的数依次往右移,将第i+1个数插入到前i个排好序的队列中。复杂度O(n2)。稳定。

def insertsort(L):
    for i in range(1,len(L)):
        key = L[i]
        j = i-1
        while j>=0 and L[j]>key:
            L[j+1] = L[j]
            j -= 1
        L[j+1] = key
    return L

选择排序:i从1到n循环,循环一次将前i个数排好序,每次循环i后面的数,选择最小的一个,与i+1交换位置,属于交换排序。复杂度O(n2)。不稳定。

def selectsort(L):
    for i in range(1,len(L)):
        key = i
        for j in range(i,len(L)):
            if L[j]<L[key]:
                key = j
        L[i],L[key] = L[key],L[i]
    return L

冒泡排序

def bublesort(L):
    for i in range(len(L)):
        for j in range(len(L)-i-1):
            if L[j]>L[j+1]:
                L[j],L[j+1] = L[j+1],L[j]
    return L
posted @ 2015-03-06 18:48  sonic0214  阅读(253)  评论(0编辑  收藏  举报