python 实现冒泡排序与快速排序 遇到的错误与问题
今天看了兄弟连php里面的冒泡排序与快速排序,想了下应该可以用python实现。
冒泡排序函数:
def mysort(x):
len1 = len(x)
for i in range(len1-1,0,-1):
for j in range(0,i):
if x[j]>x[j+1]:
x[j],x[j+1]=x[j+1],x[j]
return x
第三行代码,是让i的值9到1,因为冒泡排序是大的数往后冒,当第二次循环时,最大的数已经在最后了,所以不需要在比较一次。
同理,第三次,只要让其比较到len1-2 ,第四次,比较到len1-1。
这样循环次数可以减少一半。
python支持直接交换列表值,这点也比较方便。
快速排序函数:
def qsort(x):
if (x == []) :
return []
len1 = len(x)
left = []
right = []
key = x[0]
for i in range(1,len1):
if(x[i]<=key):
left.append(x[i])
else:
right.append(x[i])
left = qsort(left)
right = qsort(right)
return left + [key] + right
快速排序的先有一个比较值key,这里取列表中的第一个值。让列表中的其他值与其比较。
如果小于它就放在right列表中,
如果大于它就放在left列表中。
然后递归。(对递归也不是很理解。只知道函数本身自己调用自己。)
最后将left、比较值key(需要转换成列表类型)、right连接在一起即可。
出现了一个错误:
RuntimeError: maximum recursion depth exceeded while calling a Python object
查询得知:
原来在python里面,递归函数的最大深度是999。超过这个深度就会报错。
我们只要在代码前面加上
import sys
sys.setrecursionlimit(1000000)
设置成1000000即可解决。
最后的代码以及测试效率:
#!usr/bin/env python
#!coding=utf-8 __author__ = 'zhengjim' import time
import random
import sys
sys.setrecursionlimit(1000000) def mysort(x):
len1 = len(x)
for i in range(len1-1,0,-1):
for j in range(0,i):
if x[j]>x[j+1]:
x[j],x[j+1]=x[j+1],x[j]
return x
def qsort(x):
if (x == []) :
return []
len1 = len(x)
left = []
right = []
key = x[0]
for i in range(1,len1):
if(x[i]<=key):
left.append(x[i])
else:
right.append(x[i])
left = qsort(left)
right = qsort(right)
return left + [key] + right
if __name__ == '__main__':
x=[]
for i in range(1000000):
j = random.randint(1,10000)
x.append(j)
start = time.clock()
qsort(x) # 改变函数,比较效率
end =time.clock()
print '%f' % (end -start)
定义了一个1000000的乱序列表。
实验结果:
# 冒泡排序 跑了5分钟以上
# 快速排序 12.017942
# 系统函数 0.428260
python 实现冒泡排序与快速排序 遇到的错误与问题的更多相关文章
- python实现冒泡排序和快速排序
冒泡排序和快排的python实现: data = [1, 3, 5, 10, 4, 7] times = 0 "冒泡排序" for i in range(len(data)): f ...
- 使用python实现冒泡排序和快速排序
1 def bubble(arr): 2 """冒泡排序""" 3 loop = len(arr) - 1 4 if loop > 0 ...
- Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。
Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...
- 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序
又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ...
- python笔记--冒泡排序升级版
前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...
- python笔记-冒泡排序【转载】
本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
- python学习笔记系列----(六)错误和异常
python至少有2类不同的错误:语法错误(Syntax Errors)和异常(Exceptions). 8.1 语法错误 这个单词应该还是很有必要认识的,呵呵,语法错误,也叫解析错误,是我们最不愿意 ...
- PHP描述冒泡排序和快速排序算法
使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组.写一个二维数组排序算法函数,能够具有通用 ...
随机推荐
- Java [Leetcode 169]Majority Element
题目描述: Given an array of size n, find the majority element. The majority element is the element that ...
- Android-给另一个Activity传递HashMap
I have a HashMap which I would pass to another Activity class. I simply use this code: Intent intent ...
- POJ 1160 Post Office
题意:有n个村庄,要在其中m个村庄里建邮局,每个村庄去邮局的代价为当前村庄到最近的一个有邮局村庄的路程,问总最小代价是多少. 解法:dp.dp[i][j]表示在前j个村庄建立i个邮局后的代价,则状态转 ...
- logback.xml配置
一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...
- Java进程占用CPU资源过多分析
问题描述: 生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析: 1,程序属于CPU密集型,和开发沟通 ...
- STM32的JTAG、SWD和串口下载的问题
最近有一个项目用到STM32,为了使PCB布线方便一些所以改了一些引脚,占用了JTAG接口的PA15和PB3,所以要禁用一下JTAG,下载采用SWD模式.这样在实际操作中做出一些总结(方法网上都有.这 ...
- 【windows核心编程】IO完成端口(IOCP)复制文件小例前简单说明
1.关于IOCP IOCP即IO完成端口,是一种高伸缩高效率的异步IO方式,一个设备或文件与一个IO完成端口相关联,当文件或设备的异步IO操作完成的时候,去IO完成端口的[完成队列]取一项,根据完成键 ...
- [NOI2001]反正切函数的应用
Time Limit:1000ms Memory Limit:65536kB Description 反正切函数可展开成无穷级数,有如下公式 (其中0 <= x <= 1) 公式(1) 使 ...
- Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形
来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...
- iOS开发相关图书推荐
Objective-C编程之道:iOS设计模式解析 作 者 [美] Carlo Chung 著:刘威 译 出 版 社 人民邮电出版社 出版时间 2011-11-01 版 次 1 页 ...