• 排序算法-冒泡排序、选择排序、插入排序、希尔排序、快速排序


    冒泡排序

    思路:从列表第一个元素开始,相邻两个相比较,如果前者比后者大,则交换,使最大的最终交换到列表末尾。

    alist = [3, 5, 2, 4, 1, 9]
    
    
    def bubbleSort(alist):
        for i in range(0, len(alist) - 1):
            for j in range(0, len(alist) - i - 1):
                if alist[j] > alist[j + 1]:
                    alist[j], alist[j + 1] = alist[j + 1], alist[j]
        return alist
    
    ret=bubbleSort(alist)
    print(ret)

    选择排序

    思路:设置一个max_index,初始假定列表第一个元素为最大值(即max_index=0),然后依次与max_index下标对应的值比较,如果比max_index对应的值大,则将max_index值改为较大的数对应的索引。

    alist = [3, 5, 2, 4, 1, 9]
    
    
    def choiceSort(alist):
        for i in range(0, len(alist) - 1):
            max_index = 0
            for j in range(1, len(alist) - i):
                if alist[j] > alist[max_index]:
                    max_index = j
                alist[len(alist) - 1 - i], alist[max_index] = alist[max_index], alist[len(alist) - 1 - i]
        return alist
    
    ret = choiceSort(alist)
    print(ret)

     插入排序

    思路:将列表分为左右两部分,前部分有序,后部分无序,后部分依次取值插入前部分,使之前部分始终有序,直到整个列表全部变为前半部分。

    alist = [3, 5, 2, 4, 1, 9]
    
    
    def insertSort(alist):
        for i in range(1, len(alist)):
            while i > 0:
                if alist[i - 1] > alist[i]:
                    alist[i - 1], alist[i] = alist[i], alist[i - 1]
                    i -= 1
                else:
                    break
        return alist
    
    
    ret = insertSort(alist)
    print(ret)

     希尔排序

    思路:根据gap分组,组内排序,再改变gap,形成新组,再进行组内插入排序,直到gap=1,再进行一次插入排序。(gap=len(alist)//2 ; gap=gap//2)

    alist = [3, 5, 2, 4, 1, 9]
    
    
    def shellSort(alist):
        gap = len(alist) // 2
        while gap >= 1:
            for i in range(gap, len(alist)):
                while i > 0:
                    if alist[i - gap] > alist[i]:
                        alist[i - gap], alist[i] = alist[i], alist[i - gap]
                        i -= gap
                    else:
                        break
            gap = gap // 2
        return alist
    
    
    ret = shellSort(alist)
    print(ret)

     快速排序

    思路:以组的第一个为基准,列表最左端为low,最右端为high,先判断high对应的值和基准值比较,如果移动high值,则暂停移动high,开始移动low,直到low和high重合,然后将基准值放在重合位置。再对基准值左右两边两个列表进行递归操作,直到最后分得最小单位为一个元素,排序完成。

    def sort(alist,start,end):
        low = start
        high = end
        #递归结束的条件
        if low > high:
            return
        #基准:最左侧的数值
        mid = alist[low]
        #low和high的关系只能是小于,当等于的时候就要填充mid了
        while low < high:
         # 向左偏移high
    while low < high: if alist[high] > mid: high -= 1 else: alist[low] = alist[high] break
         # 向右偏移low while low < high: if alist[low] < mid: low += 1 else: alist[high] = alist[low] break #当low和high重复的时候,将mid填充 if low == high: alist[low] = mid #or alist[high] = mid break #执行左侧序列 sort(alist,start,high-1) #执行右侧序列 sort(alist,low+1,end) return alist
  • 相关阅读:
    Oracle存储过程
    eclipse使用小技巧
    A.N.T的使用
    Java中JDBC连接数据库(MySQL)
    SQL常用语句例子
    c/s&&b/s区别浅析
    ngRoute+ngAnimate与JQM中的页面跳转的区别
    jQueryMobile与AngularJS的区别
    jQueryMobile--栅格布局
    jQueryMobile--基础
  • 原文地址:https://www.cnblogs.com/sun-10387834/p/12818589.html
Copyright © 2020-2023  润新知