[Python] 用Python实现常见的排序算法 →→→→→进入此内容的聊天室

来自 , 2019-03-14, 写在 Python, 查看 163 次.
URL http://www.code666.cn/view/6aadca7b
  1. #encoding=utf-8
  2. import random
  3. from copy import copy
  4.  
  5. def directInsertSort(seq):
  6.     """ 直接插入排序 """
  7.     size = len(seq)
  8.     for i in range(1,size):
  9.         tmp, j = seq[i], i
  10.         while j > 0 and tmp < seq[j-1]:
  11.             seq[j], j = seq[j-1], j-1
  12.         seq[j] = tmp
  13.     return seq
  14.  
  15. def directSelectSort(seq):
  16.     """ 直接选择排序 """
  17.     size = len(seq)
  18.     for i in range(0,size - 1):
  19.         k = i;j = i+1
  20.         while j < size:
  21.             if seq[j] < seq[k]:
  22.                 k = j
  23.             j += 1
  24.         seq[i],seq[k] = seq[k],seq[i]
  25.     return seq
  26.  
  27. def bubbleSort(seq):
  28.     """冒泡排序"""
  29.     size = len(seq)
  30.     for i in range(1,size):
  31.         for j in range(0,size-i):
  32.             if seq[j+1] < seq[j]:
  33.                 seq[j+1],seq[j] = seq[j],seq[j+1]
  34.     return seq
  35.  
  36. def _divide(seq, low, high):
  37.     """快速排序划分函数"""
  38.     tmp = seq[low]
  39.     while low != high:
  40.         while low < high and seq[high] >= tmp: high -= 1
  41.         if low < high:
  42.             seq[low] = seq[high]
  43.             low += 1
  44.         while low < high and seq[low] <= tmp: low += 1
  45.         if low < high:
  46.             seq[high] = seq[low]
  47.             high -= 1
  48.     seq[low] = tmp
  49.     return low
  50.  
  51. def _quickSort(seq, low, high):
  52.     """快速排序辅助函数"""
  53.     if low >= high: return
  54.     mid = _divide(seq, low, high)
  55.     _quickSort(seq, low, mid - 1)
  56.     _quickSort(seq, mid + 1, high)
  57.  
  58. def quickSort(seq):
  59.     """快速排序包裹函数"""
  60.     size = len(seq)
  61.     _quickSort(seq, 0, size - 1)
  62.     return seq
  63.  
  64. def merge(seq, left, mid, right):
  65.     tmp = []
  66.     i, j = left, mid
  67.     while i < mid and j <= right:
  68.         if seq[i] < seq[j]:
  69.             tmp.append(seq[i])
  70.             i += 1
  71.         else:
  72.             tmp.append(seq[j])
  73.             j += 1
  74.     if i < mid: tmp.extend(seq[i:])
  75.     if j <= right: tmp.extend(seq[j:])
  76.  
  77.     seq[left:right+1] = tmp[0:right-left+1]
  78.  
  79. def _mergeSort(seq, left, right):
  80.     if left == right:
  81.         return
  82.     else:
  83.         mid = (left + right) / 2
  84.         _mergeSort(seq, left, mid)
  85.         _mergeSort(seq, mid + 1, right)
  86.         merge(seq, left, mid+1, right)
  87.  
  88. #二路并归排序
  89. def mergeSort(seq):
  90.     size = len(seq)
  91.     _mergeSort(seq, 0, size - 1)
  92.     return seq
  93.  
  94. if __name__ == '__main__':
  95.     s = [random.randint(0,100) for i in range(0,20)]
  96.     print s
  97.     print "\n"
  98.     print directSelectSort(copy(s))
  99.     print directInsertSort(copy(s))
  100.     print bubbleSort(copy(s))
  101.     print quickSort(copy(s))
  102.     print mergeSort(copy(s))
  103. #//python/4309

回复 "用Python实现常见的排序算法"

这儿你可以回复上面这条便签

captcha