• 排序


    冒泡排序

    代码示例:

    def sort(alist):
        length = len(alist)
        for j in range(0,length-1):
            for i in range(0,length-1-j):
                if alist[i] > alist[i+1]:
                    alist[i],alist[i+1] = alist[i+1],alist[i]
    
    
    a = [8,3,5,7,6]
    sort(a)
    print(a)

    选择排序

      选择排序改进了冒泡排序,每次遍历列表只做一次交换。为了做到这一点,一个选择排序在他遍历时寻找最大的值,并在完成遍历后,将其放置在正确的位置。

    def sort(alist):
        length = len(alist)
        for j in range(length-1,0,-1):
            #最大值元素的下标
            max_index = 0
            for i in range(1,j+1):
                if alist[max_index] < alist[i]:
                    max_index = i
            alist[max_index],alist[j] = alist[j],alist[max_index]
    
    a = [8,3,51,7,6]
    sort(a)
    print(a)

     对于冒泡排序来讲选择排序由于交换数量的减少,选择排序通常在基准研究中执行得更快

    插入排序

    插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表。比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下:(带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素)

    代码示例

    def sort(alist):
        length = len(alist)
        for j in range(1,length):
            i = j  # i就是无序列表中的第一个元素
            while i > 0:
                if alist[i] < alist[i-1]:
                    alist[i],alist[i-1] = alist[i-1],alist[i]
                    i -= 1
                else:
                    break
    
    alist = [33,38,49,97,76,13,27]
    sort(alist)
    print(alist)

    希尔排序

       希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高

     

    def sort(alist):
        gap = len(alist) // 2
        while gap >= 1:
            for j in range(gap,len(alist)):
                i = j
                while i > 0:
                    if alist[i] < alist[i-gap]:
                        alist[i],alist[i-gap] = alist[i-gap],alist[i]
                        i -= gap
                    else:
                        break
            gap = gap // 2
    
    
    alist = [3,8,5,7,6,1,99]
    sort(alist)
    print(alist)

    快速排序

    def sort(alist,start,end):
        low = start
        high = end
        if low >= high:
            return
        mid = alist[low]
        while low < high:
            while low < high:  
                if alist[high] >= mid:
                    high -= 1
                else:
                    alist[low] = alist[high]
                    break
    
            while low < high:         
                if alist[low] < mid:
                    low += 1
                else:
                    alist[high] = alist[low]
                    break
    
        alist[low] = mid  ####
        #在mid左侧列表中递归调用该函数
        sort(alist,start,low-1)
        #mid右侧
        sort(alist,high+1,end) 
    
    
    alist = [31,8,5,7,6]
    sort(alist,0,len(alist)-1)
    print(alist)
  • 相关阅读:
    (打表+优化)简单的求和 -- zzuli -- 1783
    (动态规划)matrix -- hdu -- 5569
    (贪心)School Marks -- codefor -- 540B
    (简单广搜) Ice Cave -- codeforces -- 540C
    (单调队列) Bad Hair Day -- POJ -- 3250
    链接的伪类选择器
    css定位的三种选择器
    选择器分组
    css和html的三种结合方式 页内和页外
    html的Meta标签
  • 原文地址:https://www.cnblogs.com/wanglan/p/10896714.html
Copyright © 2020-2023  润新知