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使用正则匹配实现抓图代码分享
Apr 02 Python
Python标准库之Sys模块使用详解
May 23 Python
使用django-guardian实现django-admin的行级权限控制的方法
Oct 30 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
python 读取修改pcap包的例子
Jul 23 Python
PyTorch预训练的实现
Sep 18 Python
numpy 声明空数组详解
Dec 05 Python
python实现信号时域统计特征提取代码
Feb 26 Python
使用Keras 实现查看model weights .h5 文件的内容
Jun 09 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
python 绘制国旗的示例
Sep 27 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 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
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php daodb插入、更新与删除数据
2009/03/19 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
2016/10/08 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
windows下的WAMP环境搭建图文教程(推荐)
2017/07/27 PHP
学习YUI.Ext 第四天--对话框Dialog的使用
2007/03/10 Javascript
Javascript &amp; DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
JavaScript函数、方法、对象代码
2008/10/29 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
2013/01/24 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
初识SmartJS - AOP三剑客
2014/06/08 Javascript
jQuery实现内容定时切换效果完整实例
2016/04/06 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
jQuery+ThinkPHP+Ajax实现即时消息提醒功能实例代码
2017/03/21 jQuery
Vue数据监听方法watch的使用
2018/03/28 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
js 实现ajax发送步骤过程详解
2019/07/25 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
python之wxPython应用实例
2014/09/28 Python
Python代码太长换行的实现
2019/07/05 Python
详解python实现数据归一化处理的方式:(0,1)标准化
2019/07/17 Python
Python socket 套接字实现通信详解
2019/08/27 Python
python、Matlab求定积分的实现
2019/11/20 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
生产部厂长助理职位说明书
2014/03/03 职场文书
软件测试专业推荐信
2014/09/18 职场文书
护士个人年终总结
2015/02/13 职场文书
宾馆客房管理制度
2015/08/06 职场文书
GO中sync包自由控制并发示例详解
2022/08/05 Golang