今天看了兄弟连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 实现冒泡排序与快速排序 遇到的错误与问题的更多相关文章

  1. python实现冒泡排序和快速排序

    冒泡排序和快排的python实现: data = [1, 3, 5, 10, 4, 7] times = 0 "冒泡排序" for i in range(len(data)): f ...

  2. 使用python实现冒泡排序和快速排序

    1 def bubble(arr): 2 """冒泡排序""" 3 loop = len(arr) - 1 4 if loop > 0 ...

  3. Python八大算法的实现,插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。

    Python八大算法的实现,插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得 ...

  4. 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序

    又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ...

  5. python笔记--冒泡排序升级版

    前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一批英雄好汉,本篇就详细讲解如何用python进行冒泡排序. 一.基本原理 1.概念: 冒泡排序(Bubble Sort),是一种 ...

  6. python笔记-冒泡排序【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/python/ 前言 面试的时候经常有面试官喜欢问如何进行冒泡排序?这个问题相信能难倒一 ...

  7. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  8. python学习笔记系列----(六)错误和异常

    python至少有2类不同的错误:语法错误(Syntax Errors)和异常(Exceptions). 8.1 语法错误 这个单词应该还是很有必要认识的,呵呵,语法错误,也叫解析错误,是我们最不愿意 ...

  9. PHP描述冒泡排序和快速排序算法

    使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组.写一个二维数组排序算法函数,能够具有通用 ...

随机推荐

  1. 解析UML9种图的作用

    本文和大家重点讨论一下UML9种图的概念,UML中有五类图,共有9种图形,每种图形都有各自的特点,下面就让我们一起来看一下这些图形特点的详细介绍吧. UML9种图简介 1.用例图 说明的是谁要使用系统 ...

  2. Darwin Streaming Server 安裝操作備忘

    Darwin Streaming Server 安裝操作 Darwin Streaming Server是蘋果公司推出的開放源碼.跨平台多媒體串流伺服器, 提供音樂 (mp3) 與影音 (3gp.mp ...

  3. HashMap的两种遍历方式

    HashMap的两种遍历方式 HashMap存储的是键值对:key-value . java将HashMap的键值对作为一个整体对象(java.util.Map.Entry)进行处理,这优化了Hash ...

  4. hdu 1078(dfs记忆化搜索)

    题意:容易理解... 思路:我开始是用dfs剪枝做的,968ms险过的,后来在网上学习了记忆化搜索=深搜形式+dp思想,时间复杂度大大降低,我个人理解,就是从某一个点出发,前面的点是由后面的点求出的, ...

  5. C# chart,有关如何在鼠标移动到Series上时显示节点及数据 (有待继续更新)

    一.效果与思路 效果: 解决方案1 用chart的mousemove时间,实时跟踪鼠标最近的X轴的位置,然后把cursorX设置到那个位置上,让用户知道我是选的那一个X的值,同时用tooltip显示该 ...

  6. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 get_selected_list_labels(self, locator)

    def get_selected_list_labels(self, locator): """Returns the visible labels of selecte ...

  7. Dictionary<实体,List<实体>>的比较

    当Dictionary中Key为实体时,进行用ContainsKey比较会发现,就算Model为一样但是结果比较为不存在: 故用以下代码即可,现将Keys转换ToArray(),再用数组的Contai ...

  8. 3669 [Noi2014]魔法森林(LCT,最小生成树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3669 [题意] 给定一个无向图,求1-n的路径中最小的max{ai}+max{bi} ...

  9. Tkinter教程之Canvas篇(2)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1811888 '''Tkinter教程之Canvas篇(2)''''''9.创建item的tag ...

  10. 恒天云技术分享系列5 – 虚拟化平台性能对比(KVM & VMware)

    恒天云技术分享系列:http://www.hengtianyun.com/download-show-id-14.html 概述 本性能测试报告将详细陈述各虚拟化平台基准性能测试的主要结论和详细结果. ...