python(三)6种排序算法性能比较(冒泡、选择、插入、希尔、快速、归并)
2017-09-30 19:28
741 查看
# coding:utf-8 import random import time def bubble_sort(alist): """冒泡""" n = len(alist) for j in range(n-1): count = 0 for i in range(0, n-1-j): if alist[i] > alist[i+1]: alist[i],alist[i+1] = alist[i+1], alist[i] count += 1 if 0 == count: return def select_sort(alist): """选择""" n = len(alist) for j in range(n-1): min_index = j for i in range(j+1, n): if alist[min_index] > alist[i]: min_index = i alist[j], alist[min_index] = alist[min_index], alist[j] def insert_sort(alist): """插入""" n = len(alist) for j in range(1, n): i = j while i > 0: if alist[i] < alist[i-1]: alist[i], alist[i-1] = alist[i-1], alist[i] i -= 1 else: break def shell_sort(alist): """希尔""" n = len(alist) gap = n // 2 while gap > 0: for j in range(gap, n): i = j while i > 0: if alist[i] < alist[i-gap]: alist[i], alist[i-gap] = alist[i-gap], alist[i] i -= gap else: break gap //= 2 def quick_sort(alist, first, last): """快速""" if first >= last: return mid_value = alist[first] low = first high = last while low < high: while low < high and alist[high] >= mid_value: high -= 1 alist[low] = alist[high] while low <high and alist[low] < mid_value: low += 1 alist[high] = alist[low] alist[low] = mid_value quick_sort(alist, first, low-1) quick_sort(alist, low+1, last) def merge_sort(alist): """归并""" n = len(alist) if n <= 1: return alist mid = n//2 left_li = merge_sort(alist[:mid]) right_li = merge_sort(alist[mid:]) left_pointer, right_pointer = 0, 0 result = [] while left_pointer < len(left_li) and right_pointer < len(right_li): if left_li[left_pointer] <= right_li[right_pointer]: result.append(left_li[left_pointer]) left_pointer += 1 else: result.append(right_li[right_pointer]) right_pointer += 1 result += left_li[left_pointer:] result += right_li[right_pointer:] return result if __name__ == "__main__": seq = list(range(1, 10000)) li = random.sample(seq, 1000) print(li) start = time.clock() # bubble_sort(li)# 0.118379 # select_sort(li)# 0.049213 # insert_sort(li)# 0.097392 # shell_sort(li)# 0.011831 quick_sort(li, 0, len(li) - 1)# 0.003824 # li = merge_sort(li)# 0.005906 end = time.clock() print("time: %f " % (end - start)) print(li)
作者用一万以内的1000个数字进行排序,快排胜出
相关文章推荐
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 七种排序算法总结(冒泡、插入、选择、希尔、归并、堆、快速)
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 6种排序算法:冒泡、鸡尾酒、选择、插入、归并、快速
- 数据结构 27 排序 排序-选择 插入 冒泡 希尔 快速归并 6种排序
- 排序算法大集合,插入、选择、冒泡、希尔、堆、归并、快速排序,总有一款适合你
- 基本的排序算法(选择、插入、冒泡、希尔、归并、堆、快速)
- 常见内部排序算法 简单数组实现与分析(快速(偶原创partition函数,望众高手指正)、归并、希尔、插入、选择、冒泡)
- 10种排序算法总结(冒泡、选择、插入、希尔、归并、快速、堆、拓扑、锦标赛、基数)
- Java 基础排序算法(冒泡,比较,插入,选择,希尔,堆,归并)
- 排序算法Java描述:选择、冒泡、插入、希尔、归并、快速及三向切分快速排序
- 数据结构(C#)--冒泡、插入、快速、堆、归并、希尔、选择各种排序排序过程比较以及各种排序的所用时间的对比
- 常用排序算法总结(插入、冒泡、选择、希尔、快速、归并、堆)
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- C++排序算法总结(冒泡、插入、选择、希尔、归并、快速、堆)
- 《冒泡,选择,插入,归并,希尔,快速》排序算法java实现一览
- 小白学数据结构——四、排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 6种排序算法的简洁实现:冒泡、选择、插入、归并、快速、堆