Python實現選擇排序、冒泡排序、快速排序

1.選擇排序

#選擇排序
#每次找出一個最小值
def SelectSort(lst):
    n = len(lst)
    for i in range(n):
        valueI = lst[i]
        for j in range(i+1,n):
            tmp2 = lst[j]
            if valueI > tmp2:
                lst[i],lst[j] = tmp2,valueI
                valueI = tmp2
    return lst

2.冒泡排序

#冒泡排序
#通過交換相鄰兩點的值來實現每次排好一個最大值
def BubbleSort(lst):
    n = len(lst)
    for i in range(n):
        for j in range(0,n-i-1):
            if(lst[j]>lst[j+1]):
                lst[j],lst[j+1] = lst[j+1],lst[j]
    return lst

3.快速排序

#快速排序
#採用分治的方法,選擇lst[0]作爲中間點,將大於lst[0]的換到右邊,小於lst0]的換到左邊,遞歸

import numpy as np
lst = list(np.random.randint(1000,size=100000))
def QuickSort(lst):
    n = len(lst)
    if n <= 1:
        return lst
    midValue = lst[0]
    leftIdx = 1
    rightIdx = n-1

    while(leftIdx != rightIdx):
        #右端點小於lst[0]則在從左端點出發,直接找到一個大於lst[0]的點,兩點互換,來實現左側都小 
        #於右側
        if (lst[rightIdx] <= midValue):
            if (lst[leftIdx]<=midValue):
                leftIdx += 1
            else:
                lst[leftIdx],lst[rightIdx] = lst[rightIdx],lst[leftIdx]
                rightIdx -= 1
        else:
            rightIdx -= 1
    if (lst[leftIdx]<=midValue):
        return QuickSort(lst[1:leftIdx+1])+ [midValue] + QuickSort(lst[leftIdx+1:])
    else:
        return QuickSort(lst[1:leftIdx])+ [midValue] + QuickSort(lst[leftIdx:])

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章