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递归删除指定目录及其所有内容的方法
Jan 13 Python
python如何对实例属性进行类型检查
Mar 20 Python
简单谈谈Python的pycurl模块
Apr 07 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python学生信息管理系统(完整版)
Apr 05 Python
django解决跨域请求的问题
Nov 11 Python
使用Python 正则匹配两个特定字符之间的字符方法
Dec 24 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
python数据处理——对pandas进行数据变频或插值实例
Apr 22 Python
python解决12306登录验证码的实现
Apr 18 Python
Pytorch数据读取之Dataset和DataLoader知识总结
May 23 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伪静态页面函数附使用方法
2008/06/20 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
Angularjs 实现分页功能及示例代码
2016/09/14 Javascript
jQuery实现两列等高并自适应高度
2016/12/22 Javascript
react开发中如何使用require.ensure加载es6风格的组件
2017/05/09 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
解决vue中的无限循环问题
2020/07/27 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[01:18:33]Secret vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python常见异常分类与处理方法
2017/06/04 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
如何基于Python实现自动扫雷
2020/01/06 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
Unix如何添加新的用户
2014/08/20 面试题
品管员岗位职责
2013/11/10 职场文书
教学实验楼管理制度
2014/02/01 职场文书
初中生期末评语大全
2014/04/24 职场文书
授权委托书范文
2014/07/31 职场文书
政风行风整改方案
2014/10/25 职场文书
工人先进事迹材料
2014/12/26 职场文书
计划生育个人总结
2015/03/02 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书