python_排序_验证

__author__ = "zhigege"

#python_排序
#encoding=utf-8
import randomfrom 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 "\n"
        print directSelectSort(copy(s))
        print directInsertSort(copy(s))
        print bubbleSort(copy(s))
        print quickSort(copy(s))
        print mergeSort(copy(s))

posted on 2012-07-21 19:16  百小度治哥  阅读(360)  评论(0编辑  收藏  举报

导航