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 version 2.7 required, which was not found in the registry
Aug 26 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
Nov 29 Python
Python使用三种方法实现PCA算法
Dec 12 Python
Python线程创建和终止实例代码
Jan 20 Python
Python向Excel中插入图片的简单实现方法
Apr 24 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
python实现反转部分单向链表
Sep 27 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
基于python实现从尾到头打印链表
Nov 02 Python
使用PyOpenGL绘制三维坐标系实例
Dec 24 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
如何用Python和JS实现的Web SSH工具
Feb 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中使用Oracle数据库(2)
2006/10/09 PHP
smarty中先strip_tags过滤html标签后truncate截取文章运用
2010/10/25 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
PHP利用递归函数实现无限级分类的方法
2019/03/22 PHP
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JavaScript中this详解
2015/09/01 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
JS求1到任意数之间的所有质数的方法详解
2019/05/20 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
24行JavaScript代码实现Redux的方法实例
2019/11/17 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python 存储字符串时节省空间的方法
2019/04/23 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python进度条显示之tqmd模块
2020/08/22 Python
python用Configobj模块读取配置文件
2020/09/26 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
重构Python代码的六个实例
2020/11/25 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
帕克纽约:PARKER NY
2018/12/09 全球购物
印度尼西亚最好的小工具在线商店:Erafone.com
2019/03/26 全球购物
自我鉴定怎么写
2013/12/05 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
元宵节主持词
2014/03/25 职场文书
股权投资意向书
2014/04/01 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL