• Python实现的常用排序方法


    1.冒泡排序,相邻位置比较大小,将比较大的(或小的)交换位置
    def maopao(a):
        for i in range(0,len(a)):
            for j in range(0,len(a)-i-1):
                if a[j]>a[j+1]:
                    temp = a[j+1]
                    a[j+1] = a[j]
                    a[j] = temp
                    #print(a)
            #print(a)
        print(a)

    2.选择排序,遍历选择一个最小的数与当前循环的第一个数交换
    def xuanze(a):
        for i in range(0,len(a)):
            k=i
            temp = a[i]
            for j in range(i,len(a)):
                if a[j]<temp:
                    temp = a[j]
                    k = j
            a[k] = a[i]
            a[i] = temp
        print(a)
     
    3.快速排序:将子段的第一个元素做为中值,先从右向左遍历,如过比中值大high-1,如果比中值小,将这个值放到low那里。
    然后从左向右开始遍历,如果左侧的比中值大,将他放到high那里。当low>=high时,将中值的值赋给low
     
    1).以下为参照公众号中的做法:
    a =[7,1,3,2,6,54,4,4,5,8,12,34]
    def sort(a,low,high): 
        while low < high:
            temp = a[low]
            while low < high and a[high]>=temp:
                high = high-1
            a[low]=a[high]
            while low<high and a[low]<temp:
                low = low+1
            a[high]=a[low]           
            a[low]=temp
        return low
    def quicksort(a,low,high):
        if low<high:
            middle = sort(a,low,high)
            quicksort(a,low,middle)
            quicksort(a,middle+1,high)
            print(a)
    sort(a,0,len(a)-1)
    quicksort(a,0,len(a)-1)
    print(a)
     
    2).以下是参照网上的做法:
    #在做快速排序时一直各种问题,是因为地柜那里没有考虑清楚,一直把low的值赋值为0了,
    #实际上应该是不固定的low值,他每个子循环不定。
    a =[7,1,3,2,6,54,4,4,5,8,12,34]
    def sort(a,low,high): 
        while low < high:
            temp = a[low]
            while low < high and a[high]>=temp:
                high = high-1
            while low<high and a[high]<temp:
                a[low]=a[high]           
                low =low+1
                a[high]=a[low]
            a[low]=temp
        return low
    def quicksort(a,low,high):
        if low<high:
            middle = sort(a,low,high)
            quicksort(a,low,middle)
            quicksort(a,middle+1,high)
            print(a)
    sort(a,0,len(a)-1)
    quicksort(a,0,len(a)-1)
    print(a)
     
     
    4插入排序:从左向右遍历,依次选取数值,从数值的左侧从右向左遍历,选择第一个比他小的数值的右侧插入该数值,其他数值依次向后赋值
    #插入排序
    a =[7,1,3,2,6,54,4,4,5,8,12,34]
    for i in range(0,len(a)-1):
        temp=a[i+1]
        j=i+1
        while j>=0 and temp<a[j-1]:
            j=j-1      
            print(j)
        if j>=-1:
            k= i+1
            while k>=j:
                a[k]=a[k-1]
                k=k-1
                print(a)
            a[j]=temp
    print(a)
     
    插入排序方法2,用到了列表的a.insert(1,2)和清楚a[2:3]=[],这样可以少用一个循环
    a =[7,1,3,2,6,54,4,4,5,8,12,34]
    for i in range(1,len(a)-1):
        temp=a[i]
       
        j=i-1
        while j>=0 and temp<=a[j]:
            print(temp)
            j=j-1
        if j >=-1:
            a[i:i+1]=[]
            a.insert(j+1,temp)
            print(a)
    print(a)
  • 相关阅读:
    JAVA中对Cookie的操作
    springboot 快速开发的定制补充
    centos7 安装 mysql5.7 版本(全)
    springboot redis-cache 自动刷新缓存
    spring-data-redis-cache 使用及源码走读
    Redis 相关功能和实用命令(五)
    Redis 集群(三)
    Redis 主从,哨兵,集群实战(四)
    redis 主从复制和哨兵模式(二)
    导出 mysql 数据到 redis
  • 原文地址:https://www.cnblogs.com/meitian/p/4814759.html
Copyright © 2020-2023  润新知