• 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))
    

      

  • 相关阅读:
    每周进度及工作量统计——2016.10.06-2016.10.13
    SCRUM站立会议模拟
    java词频统计——web版支持
    每周进度及工作量统计——2016.9.22--2016.9.29
    简易四则运算生成程序——第一次改进后的单元测试
    java词频统计——改进后的单元测试
    第一次通读《构建之法》阅读笔记
    centOS6.5网络配置
    webpack安装
    CommonJS和AMD/CMD
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/3847353.html
Copyright © 2020-2023  润新知