# timing 7 different Python sorting algorithms with a list of integers
# each function is given the same list (fresh copy each time)
# tested with Python2.7
# -*- coding: utf-8 -*-
"""
Created on Tue Oct 18 09:54:20 2011
@author: Guo
"""
import random # for generating random numbers
import time # for timing each sort function with time.clock()
DEBUG = False # set True to check results of each sort
N = 1000 # number of elements in list
list1 = [] # list of integer elements
for i in range(0, N):
list1.append(random.randint(0, N-1))
#print list1 # test
def print_timing(func):
def wrapper(*arg):
t1 = time.clock()
res = func(*arg)
t2 = time.clock()
print '%s took %0.3fms' % (func.func_name, (t2-t1)*1000.0)
return res
return wrapper
# declare the @ decorator just above each sort function, invokes print_timing()
@print_timing
def adaptive_merge_sort(list2):
"""adaptive merge sort, built into Python since version 2.3"""
list2.sort()
@print_timing
def bubble_sort(list2):
#swap_test = False
for i in range(0, len(list2) - 1):
# as suggested by kubrick, makes sense
swap_test = False
for j in range(0, len(list2) - i - 1):
if list2[j] > list2[j + 1]:
list2[j], list2[j + 1] = list2[j + 1], list2[j] # swap
swap_test = True
if swap_test == False:
break
# selection sort
@print_timing
def selection_sort(list2):
for i in range(0, len (list2)):
min = i
for j in range(i + 1, len(list2)):
if list2[j] < list2[min]:
min = j
list2[i], list2[min] = list2[min], list2[i] # swap
# insertion sort
@print_timing
def insertion_sort(list2):
for i in range(1, len(list2)):
save = list2[i]
j = i
while j > 0 and list2[j - 1] > save:
list2[j] = list2[j - 1]
j -= 1
list2[j] = save
# quick sort
@print_timing
def quick_sort(list2):
quick_sort_r(list2, 0, len(list2) - 1)
# quick_sort_r, recursive (used by quick_sort)
def quick_sort_r(list2 , first, last):
if last > first:
pivot = partition(list2, first, last)
quick_sort_r(list2, first, pivot - 1)
quick_sort_r(list2, pivot + 1, last)
# partition (used by quick_sort_r)
def partition(list2, first, last):
sred = (first + last)/2
if list2[first] > list2 [sred]:
list2[first], list2[sred] = list2[sred], list2[first] # swap
if list2[first] > list2 [last]:
list2[first], list2[last] = list2[last], list2[first] # swap
if list2[sred] > list2[last]:
list2[sred], list2[last] = list2[last], list2[sred] # swap
list2 [sred], list2 [first] = list2[first], list2[sred] # swap
pivot = first
i = first + 1
j = last
while True:
while i <= last and list2[i] <= list2[pivot]:
i += 1
while j >= first and list2[j] > list2[pivot]:
j -= 1
if i >= j:
break
else:
list2[i], list2[j] = list2[j], list2[i] # swap
list2[j], list2[pivot] = list2[pivot], list2[j] # swap
return j
# heap sort
@print_timing
def heap_sort(list2):
first = 0
last = len(list2) - 1
create_heap(list2, first, last)
for i in range(last, first, -1):
list2[i], list2[first] = list2[first], list2[i] # swap
establish_heap_property (list2, first, i - 1)
# create heap (used by heap_sort)
def create_heap(list2, first, last):
i = last/2
while i >= first:
establish_heap_property(list2, i, last)
i -= 1
# establish heap property (used by create_heap)
def establish_heap_property(list2, first, last):
while 2 * first + 1 <= last:
k = 2 * first + 1
if k < last and list2[k] < list2[k + 1]:
k += 1
if list2[first] >= list2[k]:
break
list2[first], list2[k] = list2[k], list2[first] # swap
first = k
# merge sort
@print_timing
def merge_sort(list2):
merge_sort_r(list2, 0, len(list2) -1)
# merge sort recursive (used by merge_sort)
def merge_sort_r(list2, first, last):
if first < last:
sred = (first + last)/2
merge_sort_r(list2, first, sred)
merge_sort_r(list2, sred + 1, last)
merge(list2, first, last, sred)
# merge (used by merge_sort_r)
def merge(list2, first, last, sred):
helper_list = []
i = first
j = sred + 1
while i <= sred and j <= last:
if list2 [i] <= list2 [j]:
helper_list.append(list2[i])
i += 1
else:
helper_list.append(list2 [j])
j += 1
while i <= sred:
helper_list.append(list2[i])
i +=1
while j <= last:
helper_list.append(list2[j])
j += 1
for k in range(0, last - first + 1):
list2[first + k] = helper_list [k]
# test sorted list by printing the first 10 elements
def print10(list2):
for k in range(10):
print list2[k],
print
# run test if script is executed
if __name__ == "__main__" :
print "timing 7 sorting algorithms with a list of 1000 integers:"
# make a true copy of list1 each time
list2 = list(list1)
adaptive_merge_sort(list2)
if DEBUG:
print10(list2)
list2 = list(list1)
bubble_sort(list2)
if DEBUG:
print10(list2)
list2 = list(list1)
heap_sort(list2)
if DEBUG:
print10(list2)
list2 = list(list1)
insertion_sort(list2)
if DEBUG:
print10(list2)
list2 = list(list1)
merge_sort(list2)
if DEBUG:
print10(list2)
list2 = list(list1)
quick_sort(list2)
if DEBUG:
print10(list2)
list2 = list(list1)
selection_sort(list2)
if DEBUG:
print10(list2)
# final test
list2 = list(list1)
if DEBUG:
print "final test: ",
print10(list2)
#raw_input( "Press Enter to continue..." )
"""
typical results:
timing 7 sorting algorithms with a list of 1000 integers:
adaptive_merge_sort took 0.560ms
bubble_sort took 269.691ms
heap_sort took 13.556ms
insertion_sort took 130.870ms
merge_sort took 19.272ms
quick_sort took 6.849ms
selection_sort took 120.291ms
`````````````````````````````
timing 7 sorting algorithms with a list of 1000 integers:
adaptive_merge_sort took 0.470ms
bubble_sort took 242.426ms
heap_sort took 10.453ms
insertion_sort took 112.837ms
merge_sort took 11.294ms
quick_sort took 6.688ms
selection_sort took 124.995ms
"""
分享到:
相关推荐
Python数据挖掘师则更专注于技术层面,他们需要深厚的编程基础,能够设计和实现复杂的算法模型,通过数据挖掘揭示有价值的信息,为业务决策提供科学依据。 总而言之,Python的学习不仅可以帮助你成为一名全能的全栈...
4. Python数据结构与算法:结合高中信息课程标准,讲解Python中数据结构的概念,如使用Python的图解数据结构教程。 5. Python设计模式:课程将介绍设计模式在Python编程中的应用,教材包括《Python编程实战:运用...
《Python实战-从菜鸟到大牛的进阶之路》是一本专为Python初学者和有志于提升技能的开发者设计的教程。这本书旨在通过实践案例,帮助读者掌握Python编程的基础和高级技巧,从而逐步成长为Python大牛。v1.1版本的更新...
"图解数据结构 - 使用 Python"和"算法图解-Python 语言版本"适合高中生学习,它们以Python解释数据结构和算法,如链表、树和排序算法。 【Python设计模式】 "Python 编程实战:运用设计模式、并发和程序库创建高...
Python的Scikit-learn库提供了大量的机器学习算法,包括分类、回归、聚类和降维等。TensorFlow和PyTorch则是深度学习的首选平台,可以构建神经网络并进行模型训练。 文件操作也是Python编程中必不可少的部分,包括...
课程提供了多个学习平台,如菜鸟教程、Python中文学习大本营,以及Python官网和官方文档,为自主学习提供了丰富的资料。 总之,这个青少年趣味编程Python系列课程旨在提供一个全面、有趣的Python学习路径,从基础...
Python是一种流行的高级编程语言,以其简洁的语法和强大的功能而受到广泛的欢迎。它是一种脚本语言,意味着你可以直接运行编写好的代码,而无需先进行编译。Python的语法设计尽可能地贴近自然语言,使得初学者能够更...
这里是专栏第十篇练习题所对应的代码文件,特别分出来希望可以对大家有帮助。三道练习题都可以在了LeetCode上找到,如果...希望可以帮助大家更好的学习,但我也是一个菜鸟,还有很多不足,希望可以一起讨论,一起进步。
《人工智能程序设计-高级Python程序设计-西工大-noj前60道》这份文档是针对西安工业大学NOJ(Online Judge)平台前60道题目的解析,旨在帮助学习者掌握Python的基础语法和简单算法。内容包括详细的解题思路、代码...
网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐 权重衰减进行用户兴趣标签权重的衰减,避免内容推荐的过度...
蛙跳算法python代码
菜鸟一枚,编程初学者,最近想使用Python3实现几个简单的机器学习分析方法,记录一下自己的学习过程。 关于KMeans算法本身就不做介绍了,下面记录一下自己遇到的问题。 一 、关于初始聚类中心的选取 初始聚类中心的...
此阶段大约需要1-2周的时间。 **推荐资源:** - **菜鸟教程:** [Python简介](https://www.runoob.com/python3/python3-tutorial.html) - **Codecademy:** [Learn to code, interactively, for free]...
10. **基本算法**:可能包含简单的搜索、排序算法,如线性搜索、冒泡排序、选择排序等,帮助学习者理解算法思想。 通过解答这些题目,初学者不仅能熟练掌握Python语法,还能逐步提高问题解决能力和逻辑思维能力,为...
fbnqs.append(fbnqs[-1] + fbnqs[-2]) return fbnqs ``` 这个问题可以帮助我们学习如何使用 Python 的递归函数和循环语句来解决复杂的算法问题。 这些问题可以帮助我们学习和掌握 Python 编程语言的各种技术和...
OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了很多常用的图像处理和计算机视觉算法。教程中涵盖了从安装OpenCV环境开始到编写具体代码,再到演示执行结果和进行配图的完整过程。 教程主要分为以下几个...
Python适用于各种实际应用场景,如使用matplotlib制作动画来演示算法过程,如快速排序和归并排序。通过turtule库可以创建动态效果,如绘制雪花或时间轴。这些实例展示了Python在算法实现和可视化方面的实用性。 ...
python flask实时播放算法处理后的实时视频流。详情:https://blog.csdn.net/qq_34717531/article/details/125079685?spm=1001.2014.3001.5502。 本代码实现python,flask部署web端,可输入图片,视频,RTSP数据流。...
### Python3菜鸟教程:深入解析range函数与列表操作 #### range()函数详解 在Python编程中,`range()`函数是一个非常实用且强大的内置函数,它主要用于生成一系列连续整数的序列。这对于创建数字序列、控制循环...