zoukankan      html  css  js  c++  java
  • python中的各种排序

    #encoding=utf-8
    import random
    from copy import copy
      
    def directInsertSort(seq):
        """ 直接插入排序 """
        size = len(seq)
        for i in range(1,size):
            tmp, j = seq[i], i
            while j > 0 and tmp < seq[j-1]:
                seq[j], j = seq[j-1], j-1
            seq[j] = tmp
        return seq
      
    def directSelectSort(seq):
        """ 直接选择排序 """
        size = len(seq)
        for i in range(0,size - 1):
            k = i;j = i+1
            while j < size:
                if seq[j] < seq[k]:
                    k = j
                j += 1
            seq[i],seq[k] = seq[k],seq[i]
        return seq
      
    def bubbleSort(seq):
        """冒泡排序"""
        size = len(seq)
        for i in range(1,size):
            for j in range(0,size-i):
                if seq[j+1] < seq[j]:
                    seq[j+1],seq[j] = seq[j],seq[j+1]
        return seq
      
    def _divide(seq, low, high):
        """快速排序划分函数"""
        tmp = seq[low]
        while low != high:
            while low < high and seq[high] >= tmp: high -= 1
            if low < high:
                seq[low] = seq[high]
                low += 1
            while low < high and seq[low] <= tmp: low += 1
            if low < high:
                seq[high] = seq[low]
                high -= 1
        seq[low] = tmp
        return low
      
    def _quickSort(seq, low, high):
        """快速排序辅助函数"""
        if low >= high: return
        mid = _divide(seq, low, high)
        _quickSort(seq, low, mid - 1)
        _quickSort(seq, mid + 1, high)
      
    def quickSort(seq):
        """快速排序包裹函数"""
        size = len(seq)
        _quickSort(seq, 0, size - 1)
        return seq
      
    def merge(seq, left, mid, right):
        tmp = []
        i, j = left, mid
        while i < mid and j <= right:
            if seq[i] < seq[j]:
                tmp.append(seq[i])
                i += 1
            else:
                tmp.append(seq[j])
                j += 1
        if i < mid: tmp.extend(seq[i:])
        if j <= right: tmp.extend(seq[j:])
      
        seq[left:right+1] = tmp[0:right-left+1]
      
    def _mergeSort(seq, left, right):
        if left == right: 
            return
        else:
            mid = (left + right) / 2
            _mergeSort(seq, left, mid)
            _mergeSort(seq, mid + 1, right)
            merge(seq, left, mid+1, right)
      
    #二路并归排序
    def mergeSort(seq):
        size = len(seq)
        _mergeSort(seq, 0, size - 1)
        return seq
      
    if __name__ == '__main__':
        s = [random.randint(0,100) for i in range(0,20)]
        print s
        print "
    "
        print directSelectSort(copy(s))
        print directInsertSort(copy(s))
        print bubbleSort(copy(s))
        print quickSort(copy(s))
        print mergeSort(copy(s))
    

      

  • 相关阅读:
    SpringBoot/SpringMVC Restful接口全局异常处理
    spring/springboot/springmvc启用GZIP压缩
    centos7启动SonarQube 8.6报错
    类型初始值设定项引发异常
    OCI is not properly installed on this machine (NOE1/INIT)
    动态调用webservice 此 XML 文档中禁用 DTD。
    系统缺少插件 系统插件已过期
    几种常见的函数
    MQTT 协议基本介绍
    etcd:从应用场景到实现原理的全方位解读【修订版】
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/3847353.html
Copyright © 2011-2022 走看看