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中的round()方法
May 15 Python
Python匹配中文的正则表达式
May 11 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
python使用folium库绘制地图点击框
Sep 21 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
使用 Python 清理收藏夹里已失效的网站
Dec 03 Python
python pandas移动窗口函数rolling的用法
Feb 29 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
如何获取numpy array前N个最大值
May 14 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
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
Yii中表单用法实例详解
2016/01/05 PHP
CI框架扩展系统核心类的方法分析
2016/05/23 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
JavaScript 异步调用框架 (Part 6 - 实例 &amp; 模式)
2009/08/04 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
jQuery插件EasyUI设置datagrid的checkbox为禁用状态的方法
2016/08/05 Javascript
jQuery实现的超链接提示效果示例【附demo源码下载】
2016/09/09 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
基于JS实现html中placeholder属性提示文字效果示例
2018/04/19 Javascript
vue中音频wavesurfer.js的使用方法
2020/02/20 Vue.js
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
用Django写天气预报查询网站
2018/10/21 Python
对python3.4 字符串转16进制的实例详解
2019/06/12 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
《小动物过冬》教学反思
2014/04/17 职场文书
求职简历自我评价范文
2015/03/10 职场文书
民间借贷借条如何写
2015/05/26 职场文书
团拜会主持词
2015/07/04 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android
vue实现简易音乐播放器
2022/08/14 Vue.js