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

      

  • 相关阅读:
    [转]rdlc报表中表达式的使用--switch和IIF范例
    [转]关于ASP.NET(C#)程序中TEXTBOX下动态DIV跟随[AJAX应用]
    CodeForces
    NYOJ306 走迷宫(dfs+二分搜索)
    全心全意为人民服务体如今我们软件设计上
    2014年麦克阿瑟基金奖,张益唐入围(62万美金用于个人支配)
    Android中SharedPreferences函数具体解释
    drupal7中CKEditor开启上传图片功能
    JBoss+Ant实现EJB无状态会话bean实例
    c#读取xml文件配置文件Winform及WebForm-Demo具体解释
  • 原文地址:https://www.cnblogs.com/huangxiaohen/p/3847353.html
Copyright © 2011-2022 走看看