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中的模块和包概念介绍
Apr 13 Python
Python程序退出方式小结
Dec 09 Python
python 处理dataframe中的时间字段方法
Apr 10 Python
Python实现的连接mssql数据库操作示例
Aug 17 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
Django 拆分model和view的实现方法
Aug 16 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
40个你可能不知道的Python技巧附代码
Jan 29 Python
Python Tornado批量上传图片并显示功能
Mar 26 Python
Python常用扩展插件使用教程解析
Nov 02 Python
Django显示可视化图表的实践
May 10 Python
Python实现简单得递归下降Parser
May 02 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
JavaScript 学习笔记(六)
2009/12/31 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
javascript中window.open在原来的窗口中打开新的窗口(不同名)
2015/11/15 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
vue实现全选和反选功能
2017/08/31 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
python3实现读取chrome浏览器cookie
2016/06/19 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python实现石头剪刀布程序
2021/01/20 Python
pandas实现excel中的数据透视表和Vlookup函数功能代码
2020/02/14 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
小学家长会邀请函
2014/01/23 职场文书
管理失职检讨书
2014/02/12 职场文书
英语国培研修感言
2014/02/13 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL