python实现的各种排序算法代码


Posted in Python onMarch 04, 2013
# -*- coding: utf-8 -*-
# 测试各种排序算法
# link:3water.com
# date:2013/2/2
#选择排序
def select_sort(sort_array):
    for i, elem in enumerate(sort_array):
        for j, elem in enumerate(sort_array[i:]):
            if sort_array[i] > sort_array[j + i]:
                #交换
                sort_array[i], sort_array[j + i] = sort_array[j + i], sort_array[i]
#冒泡排序
def bubble_sort(sort_array):
    for i, elem in enumerate(sort_array):
        for j, elem in enumerate(sort_array[:len(sort_array) - i - 1]):
            if sort_array[j] > sort_array[j + 1]:
                sort_array[j], sort_array[j + 1] = sort_array[j + 1], sort_array[j]
#插入排序
def insert_sort(sort_array):
    for i, elem in enumerate(sort_array):
        for j, elem in enumerate(sort_array[:i]):
            if sort_array[j] > sort_array[i]:
                sort_array.insert(j, sort_array[i])
                del sort_array[i + 1]
#归并排序
def merge_sort_wrapper(sort_array):
    merge_sort(sort_array, 0, len(sort_array) - 1)
def merge_sort(sort_array, left = 0, right = 0):
    if left < right:
        center = (left + right) / 2
        merge_sort(sort_array, left, center)
        merge_sort(sort_array, center + 1, right)
        merge(sort_array, left, right, center)
def merge(sort_array, left, right, center):
    result = []
    arrayA = sort_array[left:center + 1]
    arrayB = sort_array[center + 1:right + 1]
    while((len(arrayA) > 0) and (len(arrayB) > 0)):
        if(arrayA[0] > arrayB[0]):
            result.append(arrayB.pop(0))
        else:
            result.append(arrayA.pop(0))
    if(len(arrayA) > 0):
        result.extend(arrayA)
    if(len(arrayB) > 0):
        result.extend(arrayB)   
    sort_array[left:right + 1] = result
#快排    
def quick_sort(sort_array):
    if(len(sort_array) < 2):
        return
    left = [x for x in sort_array[1:] if x < sort_array[0]]
    right = [x for x in sort_array[1:] if x >= sort_array[0]]
    quick_sort(left)
    quick_sort(right)
    sort_array[:] = left + [sort_array[0]] + right
#shell排序
def shell_sort(sort_array):
    dist=len(sort_array)/2  
    while dist > 0:  
        for i in range(dist,len(sort_array)):  
            tmp=sort_array[i]  
            j = i  
            while j >= dist and tmp < sort_array[j - dist]:  
                sort_array[j] = sort_array[j - dist]  
                j -= dist  
            sort_array[j] = tmp  
        dist /= 2  
#基数排序,均为整数,不支持负数和重复
def radix_sort(sort_array):
    max_elem = max(sort_array)
    bucket_list = []
    for i in range(max_elem):
        bucket_list.insert(i, 0)
    for x in sort_array:
        bucket_list[x - 1] = -1
    sort_array[:] = [x + 1 for x in range(len(bucket_list)) if bucket_list[x] == -1]
#堆排序
def heap_sort(sort_array):
   #没有写出来,再想想
   pass
#测试例子
def algo_sort_test(sort_array, sort_method):
    sort_method(sort_array)
if __name__ == '__main__':
    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, select_sort)
    print sort_array
    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, bubble_sort)
    print sort_array    
    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, insert_sort)
    print sort_array      
    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, merge_sort_wrapper)
    print sort_array
    sort_array = [1, 2, 3, 5, -4, 4, 10, 300, 19, 13, 16, 18, 500, 190, 456, 23]
    algo_sort_test(sort_array, quick_sort)
    print sort_array  
    sort_array = [1, 2, 3, 5, -4, 4, 10, 3, 19, 13, 16, 18, 5, 190, 456, 23]
    algo_sort_test(sort_array, shell_sort)
    print sort_array       
    sort_array = [1, 2, 3, 5, 4, 10, 19, 13, 16, 18, 190, 456, 23]
    algo_sort_test(sort_array, radix_sort)
    print sort_array       
    print 'OK'

非常基础的知识内容,选择、冒泡、插入、归并、基数,还有快排都能手写出来,但写了一遍发现堆排序忘了怎么做了。要复习啦。

Python 相关文章推荐
python批量导出导入MySQL用户的方法
Nov 15 Python
python正则表达式re模块详细介绍
May 29 Python
asyncio 的 coroutine对象 与 Future对象使用指南
Sep 11 Python
Python排序搜索基本算法之冒泡排序实例分析
Dec 09 Python
linecache模块加载和缓存文件内容详解
Jan 11 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
Python中的默认参数实例分析
Jan 29 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
May 06 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
Python在OpenCV里实现极坐标变换功能
Sep 02 Python
Tensorflow进行多维矩阵的拆分与拼接实例
Feb 07 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
python 获取本机ip地址的两个方法
Feb 25 #Python
把大数据数字口语化(python与js)两种实现
Feb 21 #Python
python正则表达式修复网站文章字体不统一的解决方法
Feb 21 #Python
Python操作Mysql实例代码教程在线版(查询手册)
Feb 18 #Python
python的常见命令注入威胁
Feb 18 #Python
centos下更新Python版本的步骤
Feb 12 #Python
Python3.x和Python2.x的区别介绍
Feb 12 #Python
You might like
简单谈谈PHP中的include、include_once、require以及require_once语句
2016/04/23 PHP
slice函数的用法 之不错的应用
2006/12/29 Javascript
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
web前端开发JQuery常用实例代码片段(50个)
2015/08/28 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
详解用Webpack与Babel配置ES6开发环境
2019/03/12 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
微信小程序中网络请求缓存的解决方法
2019/12/29 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
Python脚本实现格式化css文件
2015/04/08 Python
python之PyMongo使用总结
2017/05/26 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
解决python 输出是省略号的问题
2018/04/19 Python
Python中整数的缓存机制讲解
2019/02/16 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
少年闰土教学反思
2014/02/22 职场文书
高中军训感言1000字
2014/03/01 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
2014年督导工作总结
2014/11/19 职场文书
防汛通知
2015/04/25 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
如何书写授权委托书?
2019/06/25 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang