亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Python基于比較的排序

2019-11-14 17:44:21
字體:
來源:轉載
供稿:網友

排序是算法學習中最基本的問題。

1.平均時間復雜度均為O(N2)的排序

1.1 插入排序

插入排序對少量元素的排序非常有效。工作機制就像打牌一樣,為了將牌插入到已排好序的牌中,需要將牌與手中的牌從右向左進行比較。

def insertionSort(alist):    n=len(alist)    for i in xrange(1,n):        key=alist[i]        j=i-1        while j>=0 and alist[j]>=key:            alist[j+1]=alist[j]            j-=1        alist[j+1]=key    return alist

1.2 冒泡排序

冒泡排序通過重復的交換相鄰的兩個反序元素來將最大元素置于數組末尾。

def bubbleSort(alist):    n=len(alist)    for i in xrange(n-2,0,-1):        for j in xrange(i+1):            if alist[j]>alist[j+1]:                alist[j],alist[j+1]=alist[j+1],alist[j]    return alist

1.3 選擇排序

首先找出序列中的最大元素,與最后一個元素交換位置,然后找出次大元素,與倒數第二個元素交換位置,以此類推。

def selectionSort(alist):    n=len(alist)    for i in xrange(n-1,0,-1):        posofMax=0        for j in xrange(1,i+1):            if alist[j]>=alist[posofMax]:                posofMax=j        a[posofMax],a[i]=a[i],a[posofMax]    return alist

1.4 希爾排序

SHELL排序通過比較相距一定間隔的元素來工作。各趟排序隨著算法的進行而減小,直到只比較相鄰元素的最后一趟為止。

使用希爾增量(ht=N/2,hk=hk+1/2)時希爾排序的最壞運行時間為Θ(N2),使用Hibbard增量(1,3,7,...,2k-1)的希爾排序的最壞運行時間為Θ(N3/2)。

def shellSort(alist):    n=len(alist)/2    while n>0:        gapinsertionSort(alist,n)        n=n/2    return alistdef gapinsertionSort(alist,gap):    n=len(alist)    for i in xrange(gap):        for j in xrange(i+gap,n,gap):            key=alist[j]            x=j-gap            while x>=0 and a[x]>=key:                a[x+gap]=a[x]                x-=gap            a[x+gap]=key

2.平均時間復雜度均為O(NlogN)的排序

2.1 合并排序

合并排序基本的操作是合并兩個已排序的表。它是遞歸算法的一個很好的實例。合并排序需要花費將數據拷貝到臨時數組再拷貝回來這樣一些附加的工作。

def mergeSort(alist):    if len(alist)>1:        q=len(alist)/2        left=alist[:q]        right=alist[q:]        mergeSort(left)        mergeSort(right)        i=0        j=0        k=0        while i<len(left) and j<len(right):            if left[i]<right[j]:                alist[k]=left[i]                i+=1            else:                alist[k]=right[j]                j+=1            k+=1        while i<len(left):            alist[k]=left[i]            i+=1            k+=1        while j<len(right):            alist[k]=right[j]            j+=1            k+=1    return alist

  合并排序的另一種非遞歸實現

def mergeSort(alist):    n=len(alist)    i=1    while i<n:        start=0        t=start+i-1        end=start+2*i-1        while end<n:            merge(alist,start,t,end)            start=end+1            t=start+i-1            end=start+2*i-1        if t<n-1:            merge(alist,start,t,n-1)        i=i*2    return alist                         def merge(alist,start,t,end):    left=alist[start:t+1]    right=alist[t+1:end+1]    i=0    j=0    k=start    while i<len(left) and j<len(right):        if left[i]<right[j]:            alist[k]=left[i]            i+=1        else:            alist[k]=right[j]            j+=1        k+=1    while i<len(left):        alist[k]=left[i]        i+=1        k+=1    while j<len(right):        alist[k]=right[j]        j+=1        k+=1

 2.2 堆排序

建立最大堆后將最大元素與堆最后的單元互換,堆大小縮小一,然后執行根的下濾操作找出第二大的元素。

def heapSort(alist):    n=len(alist)    buildMaxHeap(alist)    for i in xrange(n-1,0,-1):        alist[i],alist[0]=alist[0],alist[i]        perDown(alist,0,i-1)    return alistdef buildMaxHeap(alist):    n=len(alist)    for i in xrange(n/2-1,-1,-1):        perDown(alist,i,n-1)def perDown(alist,start,end):    left=start*2+1    right=left+1    large=start    if left<=end and alist[left]>alist[start]:        large=left    if right<=end and alist[right]>alist[large]:        large=right    if large!=start:        alist[large],alist[start]=alist[start],alist[large]        perDown(alist,large,end)    

 2.3 快速排序

快速排序是在實踐中最快的已知排序算法,像合并排序一樣也是一種分治的遞歸算法。

1.如果元素個數為0或1,則返回。

2.取數組中任一元素v,稱之為樞紐元。

3.將數組分為2個不相交的部分,一部分元素小于v,另一部分大于v。

4.對兩部分分別遞歸的使用快速排序。

下圖取第一個元素為樞紐元v,leftmark從第二個元素開始,rightmark從倒數第一個元素開始。

當leftmark在rightmark左邊時,將leftmark右移,移過小于v的元素,將rightmark左移,移過大于v的元素,當leftmark,rightmark停止時,

將leftmark和rightmark元素互換,直到leftmark到rightmark右邊為止。

 

def quickSort(alist):    n=len(alist)    _quickSort(alist,0,n-1)    return alistdef _quickSort(alist,s,e):    if s<e:        v=alist[s]        i=s+1        j=e        while True:            while i<=j and alist[i]<v:      #如果i和j遇到等于樞紐元的關鍵字,都停止                i+=1            while j>=i and alist[j]>v:                j-=1            if i<j:                alist[i],alist[j]=alist[j],alist[i]                i+=1                j-=1            else:                break        alist[s],alist[j]=alist[j],alist[s]        _quickSort(alist,s,j-1)        _quickSort(alist,i,e)

另一種寫法

def quickSort(alist):    n=len(alist)    _quickSort(alist,0,n-1)    return alistdef _quickSort(alist,s,e):    if s<e:        v=alist[e]        i=s    #用i將數組分為兩部分        for j in xrange(s,e):            if alist[j]<=v:                alist[j],alist[i]=alist[i],alist[j]                i+=1        alist[e],alist[i]=alist[i],alist[e]        _quickSort(alist,s,i-1)        _quickSort(alist,i+1,e)

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图五月天| 夜夜嗨av色一区二区不卡| 日韩性xxxx爱| 欧美巨乳美女视频| 国产精品96久久久久久| 亚洲qvod图片区电影| 国产久一一精品| 日韩大陆欧美高清视频区| 国语自产精品视频在免费| 国产一区二区三区久久精品| 91免费高清视频| 国产精品久久久久久五月尺| 午夜精品一区二区三区在线| 影音先锋欧美在线资源| 中文字幕无线精品亚洲乱码一区| 久久精品国产99国产精品澳门| 欧美福利视频在线观看| 精品久久香蕉国产线看观看亚洲| 中文字幕在线看视频国产欧美| 久久久久久有精品国产| 98精品国产高清在线xxxx天堂| 亚洲石原莉奈一区二区在线观看| 欧美猛少妇色xxxxx| 国产欧美欧洲在线观看| 欧日韩在线观看| 亚洲欧洲偷拍精品| 91在线国产电影| 欧美午夜美女看片| 中文日韩电影网站| 欧美成人免费观看| 51久久精品夜色国产麻豆| 日韩视频亚洲视频| 亚洲美女久久久| 日本一区二区不卡| 久久精品成人一区二区三区| 高跟丝袜欧美一区| 日韩人体视频一二区| 久久久久久久久久久91| 欧美老少做受xxxx高潮| 久久色精品视频| 国产精品v片在线观看不卡| 日韩中文字幕视频在线观看| 欧美激情一区二区三区高清视频| 久久久精品视频在线观看| 午夜精品久久久久久久99热浪潮| 青青精品视频播放| 欧美激情视频在线免费观看 欧美视频免费一| 久久综合伊人77777| 午夜精品久久久久久久99热| 午夜精品福利在线观看| 成人444kkkk在线观看| 国产精品久久久久高潮| 亚洲免费视频观看| 黄色一区二区在线| 美日韩在线视频| 国产欧美日韩综合精品| 色综合91久久精品中文字幕| 97超级碰在线看视频免费在线看| 亚洲色图色老头| 九九久久精品一区| 国产精品高清免费在线观看| 国产精品揄拍500视频| 中文字幕精品久久久久| 精品久久久在线观看| 亚洲国产三级网| 欧美多人爱爱视频网站| 亚洲精品一区久久久久久| 欧美亚洲激情在线| 成人黄色激情网| 亚洲r级在线观看| 97在线视频观看| 91免费欧美精品| 国产精品大片wwwwww| 欧美男插女视频| 亚洲成人av中文字幕| 日韩在线视频国产| 日本亚洲欧美成人| 日韩精品视频中文在线观看| 亚洲一区二区三区毛片| 国产v综合ⅴ日韩v欧美大片| 91超碰中文字幕久久精品| 国产精品影院在线观看| 国产精品男女猛烈高潮激情| 久久久伊人欧美| 亚洲精品乱码久久久久久金桔影视| 国语自产精品视频在线看一大j8| 久久久精品免费视频| 91免费国产视频| 欧美日韩亚洲成人| 日韩精品极品视频免费观看| 欧美性videos高清精品| 亚洲国产精品视频在线观看| 91爱爱小视频k| 欧洲美女7788成人免费视频| 91久久久久久久一区二区| 欧美第一淫aaasss性| 国产小视频91| 国产精品对白刺激| 精品国内自产拍在线观看| 国产午夜精品美女视频明星a级| 91在线观看免费网站| 久久精品国产电影| 国产成人a亚洲精品| 91在线观看免费网站| 欧美综合一区第一页| 国产精品久久久久久一区二区| 欧美性猛交xxxx乱大交3| 97国产精品人人爽人人做| 麻豆国产精品va在线观看不卡| 久久精品亚洲精品| 欧美激情国产日韩精品一区18| 免费不卡欧美自拍视频| 欧美成人午夜激情在线| 久久久久久久久久国产| 成年无码av片在线| 久久青草精品视频免费观看| 欧洲成人在线视频| 欧美成人久久久| 色噜噜狠狠狠综合曰曰曰| 欧美疯狂做受xxxx高潮| 亚洲毛片在线免费观看| 久久久精品久久久| 成人av色在线观看| 在线中文字幕日韩| 欧美激情中文网| 久久久久久久久电影| 91精品国产高清自在线看超| 精品国产乱码久久久久久天美| 国产精品久在线观看| 欧美电影免费观看高清| 欧美成人性色生活仑片| 久久久国产精品一区| 亚洲综合视频1区| 国产精品美女无圣光视频| 亚洲福利在线看| 亚洲男人天堂古典| 992tv成人免费影院| 91po在线观看91精品国产性色| 懂色av中文一区二区三区天美| 欧美视频在线观看 亚洲欧| 国产精品久久久| 久久精品国产成人| 欧美精品日韩www.p站| 日韩精品极品在线观看播放免费视频| 91免费欧美精品| 日韩在线免费视频| 热re99久久精品国产66热| 中文字幕视频在线免费欧美日韩综合在线看| 国产一区二区视频在线观看| 91精品国产高清久久久久久久久| www.久久草.com| 成人在线视频网| 国产精品免费在线免费| 国产91免费观看| 亚洲品质视频自拍网| 欧美电影在线观看高清| 中文欧美日本在线资源| 亚洲精品理论电影| 欲色天天网综合久久| 久久激情五月丁香伊人| 日韩视频第一页| 中文字幕av一区中文字幕天堂| 国产精品香蕉在线观看| 久久精品成人欧美大片古装|