1. 程式人生 > >python常用演算法實現

python常用演算法實現

排序是計算機語言需要實現的基本演算法之一,有序的資料結構會帶來效率上的極大提升。

1.插入排序

插入排序預設當前被插入的序列是有序的,新元素插入到應該插入的位置,使得新序列仍然有序。

def insertion_sort(old_list):
    n=len(old_list)
    k=0
    for i in range(1,n):
        temp=old_list[i]
        j=i
        while j>0 and temp<old_list[j-1]:
            old_list[j]=old_list[j-1]
            j
=j-1 old_list[j]=temp return old_list

2.氣泡排序

氣泡排序的原理是對序列進行遍歷,遍歷過程中如果發現相鄰兩個元素,左邊的元素大於右邊,則進行交換,一次遍歷之後最大的元素被移動到對尾,然後進行第二次遍歷,直到佇列有序。

def bubble_sort(old_list):
    n=len(old_list)
    for i in range(n-1):
        for j in range(n-1-i):
            if old_list[j]>old_list[j+1]:
                old_list[j],old_list[j
+1]=old_list[j+1],old_list[j] return old_list

3.快速排序

快速排序的實現方法是設定兩個遊標,一個從前往後,一個從後往前,如果左側遊標所指資料大於右側,兩資料進行交換,直到兩個遊標指向同一資料,則第一趟遍歷結束。結束時遊標所在資料,左側都比其小,右側都比其大。

接下來對遊標前後的兩個序列進行遞迴操作。

def quick_sort(list,low,high):
    i=low
    j=high    
    if i >= j:
        return list
    key=list[i]
    
while i < j: while i < j and list[j]>=key: j = j - 1 list[i]=list[j] while i < j and list[i]<=key: i = i + 1 list[j]=list[i] list[i]=key quick_sort(list,low,i-1) quick_sort(list,j+1,high) return list

4.選擇排序

選擇排序的原理是是先找到起始陣列中最小的元素,將它交換到i=0;然後尋找剩下元素中最小的元素,將它交換到i=1的位置…… 直到找到第二大的元素,將它交換到n-2的位置。這時,整個陣列的排序完成。

def select_sort(list):
    length=len(list)
    for i in range(length):
        min_index=i
        for j in range(i,length):
            if list[j]<list[min_index]:
                min_index=j
        list[i],list[min_index]=list[min_index],list[i]
    return list

5.歸併排序

歸併排序是對陣列進行拆分再拆分,直到不能再拆分,然後分別對最小粒度的子陣列進行合併,然後再合併稍微大一點的陣列,直到最終合成一個最大的陣列。分兩個函式完成,一個負責拆分,一個負責排序合併。

def merge_sort(list):
    if len(list)<=1:
        return list
    mid=int(len(list)/2)
    left=merge_sort(list[:mid])
    right=merge_sort(list[mid:])
    return merge(left,right)
    

def merge(list1,list2):
    list=[]
    i,j=0,0
    while i<len(list1) and j<len(list2):
        if list1[i]<list2[j]:
            list.append(list1[i])
            i=i+1
        elif list1[i]>=list2[j]:
            list.append(list2[j])
            j=j+1
    list.extend(list1[i:])
    list.extend(list2[j:])
    return list

 6.希爾排序

def shell_sort(nums):
    step = len(nums)/2
    while step > 0:
        for i in range(step, len(nums)):
            while i >= step and nums[i-step] > nums[i]:
                nums[i], nums[i-step] = nums[i-step], nums[i]
                i -= step
        step = step/2
    return nums