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实现合并两个数组的方法
May 16 Python
python获取当前运行函数名称的方法实例代码
Apr 06 Python
python僵尸进程产生的原因
Jul 21 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
python 获取当天凌晨零点的时间戳方法
May 22 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
python修改txt文件中的某一项方法
Dec 29 Python
python后端接收前端回传的文件方法
Jan 02 Python
python对csv文件追加写入列的方法
Aug 01 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
Python中qutip用法示例详解
Oct 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
php的一个登录的类 [推荐]
2007/03/16 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
php使用smtp发送支持附件的邮件示例
2014/04/13 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
利用纯js + transition动画实现移动端web轮播图详解
2017/09/10 Javascript
认识jQuery的Promise的具体使用方法
2017/10/10 jQuery
图文讲解vue的v-if使用方法
2019/02/11 Javascript
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
Python如何转换字符串大小写
2020/06/04 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
python中温度单位转换的实例方法
2020/12/27 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
AJax面试题
2014/11/25 面试题
公司离职证明样本
2014/09/13 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
大专护理专业自荐信
2015/03/25 职场文书
个人合作协议范本
2015/08/06 职场文书
离职员工给领导和同事的感谢信
2015/11/03 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
高一作文之暖冬
2019/11/09 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python