1. 程式人生 > >冒泡,選擇,插入,快排,歸併,計數

冒泡,選擇,插入,快排,歸併,計數

 

1、資料結構和演算法

  1.1、嚴魏敏  資料結構預演算法

  1.2、大話資料結構和演算法

2、網路

3、計算機的組成原理

4、作業系統

 

常見時間複雜度:效率

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)

 

 

 

###########################
# 氣泡排序
def bubbleSort(li):
    for i in range(len(li)-1): 
        flag 
= False for j in range(len(li)-i-1): if li[j+1] < li[j]: li[j+1],li[j] = li[j],li[j+1] flag = True if not flag: return l = [2,6,4,9,1,8,7] bubbleSort(l) print(l) ###########################
氣泡排序
#
########################## # 選擇排序 def selectSort(li): for i in range(len(li)-1): minLoc = i for j in range(i+1,len(li)): if li[j] < li[minLoc]: li[minLoc],li[j] = li[j],li[minLoc] l = [2,6,4,9,1,8,7] selectSort(l) print(l) ###########################
選擇排序
###########################
# 插入排序
def insertSort(li):
    for i in range(1,len(li)):
        tmp = li[i]
        j =i - 1
        while j >= 0 and li[j] > tmp:
            li[j+1] = li[j]
            j = j - 1
        li[j+1] = tmp
l = [2,6,4,9,1,8,7]
insertSort(l)
print(l)
###########################
插入排序
###########################
# 快速排序
def partition(li,left,right):
    tmp = li[left]
    while left < right:
        while left < right and tmp <= li[right]:
            right = right -1
        li[left] = li[right]

        while left < right and tmp >= li[left]:
            left = left + 1
        li[right] = li[left]

    li[left] = tmp
    return left

def quickSort(li,left,right):
    if left < right:
        mid = partition(li,left,right)
        quickSort(li,left,mid-1)
        quickSort(li,mid+1,right)
li = [10,4,6,3,8,2,5,7]
quickSort(li,0,len(li)-1)
print(li)
###########################
快速排序
###########################
# 歸併排序
def merge(li,low,mid,high):
    i = low
    j = mid + 1
    ltmp = []
    while i <= mid and j <= high:
        if li[i] >= li[j]:
            ltmp.append(li[j])
            j = j + 1
        else:
            ltmp.append(li[i])
            i = i + 1
    while i <= mid:
        ltmp.append(li[i])
        i = i + 1
    while j <= high:
        ltmp.append(li[j])
        j = j + 1
    li[low:high+1] = ltmp

def mergeSort(li,low,high):
    if low < high:
        mid = (low + high) // 2
        mergeSort(li,low,mid)
        mergeSort(li,mid+1,high)
        print('分解後的元素:',li[low:high+1])
        merge(li,low,mid,high)
        print('合併後的元素:',li[low:high+1])

li = [10,4,6,3,8,2,5,7]
mergeSort(li,0,len(li)-1)
###########################
歸併排序
現在有一個列表,列表中的數範圍都在0到100之間,列表長度大約為100萬。設計演算法在O(n)時間複雜度內將列表進行排序。
###########################
# 計數排序
def countSort(li):
    count = [0 for i in range(11)]
    for x in li:
        count[x] += 1
    li.clear()

    for index,val in enumerate(count):
        for i in range(val):
            li.append(index)

li = [10,4,6,3,8,2,5,7]
countSort(li)
print(li)
###########################
計數排序