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实现探测socket和web服务示例
Mar 28 Python
简述Python中的进程、线程、协程
Mar 18 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
python统计多维数组的行数和列数实例
Jun 23 Python
python实现将汉字保存成文本的方法
Nov 16 Python
Python实现批量执行同目录下的py文件方法
Jan 11 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
解决Python使用列表副本的问题
Dec 19 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
python连接mysql有哪些方法
Jun 24 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版
2012/04/20 PHP
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
浅谈php处理后端&amp;接口访问超时的解决方法
2016/10/29 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
基于jQuery的简单的列表导航菜单
2011/03/02 Javascript
js 表单提交后按钮变灰的实例代码
2013/08/16 Javascript
一个简单的jQuery计算器实现了连续计算功能
2014/07/21 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
2020/08/11 Javascript
React实现轮播效果
2020/08/25 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
python中urllib模块用法实例详解
2014/11/19 Python
Python计算字符宽度的方法
2016/06/14 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
详解如何设置Python环境变量?
2019/05/13 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
python实现五子棋人机对战游戏
2020/03/25 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
八年级历史教学反思
2014/01/10 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
厂区绿化方案
2014/05/08 职场文书
教你一步步实现一个简易promise
2021/11/02 Javascript
frg-100简单操作(设置)说明
2022/04/05 无线电