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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
用Python实现QQ游戏大家来找茬辅助工具
Sep 14 Python
python网络编程之读取网站根目录实例
Sep 30 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
Python实现八皇后问题示例代码
Dec 09 Python
Python通用循环的构造方法实例分析
Dec 19 Python
scrapy-redis的安装部署步骤讲解
Feb 27 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
Python中遍历列表的方法总结
Jun 27 Python
Flask框架 CSRF 保护实现方法详解
Oct 30 Python
python编程项目中线上问题排查与解决
Nov 01 Python
Python matplotlib多个子图绘制整合
Apr 13 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
一个查看session内容的函数
2006/10/09 PHP
Zend 输出产生XML解析错误
2009/03/03 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
玩转方法:call和apply
2014/05/08 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
jQuery队列操作方法实例
2014/06/11 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
两行代码轻松搞定JavaScript日期验证
2016/08/03 Javascript
JavaScript实现大图轮播效果
2017/01/11 Javascript
JavaScript定义全局对象的方法示例
2017/01/12 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
vue.js 上传图片实例代码
2017/06/22 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
使用react render props实现倒计时的示例代码
2018/12/06 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
跟老齐学Python之集成开发环境(IDE)
2014/09/12 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
详解python环境安装selenium和手动下载安装selenium的方法
2020/03/17 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
python如何绘制疫情图
2020/09/16 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
.NET remoting的两种通道是什么
2016/05/31 面试题
中学教师请假制度
2014/02/03 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
出售房屋协议书范本
2014/10/06 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
2021/06/13 Python