快排、堆排和归并排序的Python实现
来源:互联网 发布:手机办公软件 编辑:程序博客网 时间:2024/04/28 06:20
快速排序:
#! /usr/bin/env python#coding=utf-8import random,copydef partition(lst,left,right): pivot = lst[left] pivot_index = left left = left + 1 while True: # when pivot as lst[left] start from left while left <= right and lst[left] <= pivot: left = left + 1 while left <= right and lst[right] >= pivot: right = right - 1 if left <= right: lst[left],lst[right] = lst[right],lst[left] else: break lst[pivot_index],lst[right] = lst[right],lst[pivot_index] return rightdef quick_sort_helper(lst,start,end): if (start < end): split_position = partition(lst,start,end) quick_sort_helper(lst,start,split_position-1) quick_sort_helper(lst,split_position+1,end)def quick_sort(lst): quick_sort_helper(lst,0,len(lst)-1) def quick_sort_helper2(lst,left,right): if left < right: pivot_index = right pivot = lst[pivot_index] i = left k = left while i < right: if lst[i] <= pivot: lst[k],lst[i] = lst[i],lst[k] k = k + 1 i = i + 1 lst[k],lst[pivot_index] = lst[pivot_index],lst[k] quick_sort_helper2(lst,left,k-1) quick_sort_helper2(lst,k+1,right) def quick_sort2(lst): quick_sort_helper2(lst,0,len(lst)-1) if __name__ == '__main__': lst = [random.randint(0,20) for i in range(10)] lst2 = copy.deepcopy(lst) lst2.sort() print(lst) print(lst2) quick_sort2(lst) print(lst)
堆排序:
#! /usr/bin/env python#coding=utf-8import random,copydef heap_sort_helper(lst,left,right): # max heapify current_value = lst[left] child = 2 * left + 1 while (child <= right): if (child < right and lst[child] < lst[child+1]): child = child + 1 if (current_value > lst[child]): break else: lst[(child-1)>>1] = lst[child] child = 2 * child + 1 lst[(child-1)>>1] = current_value def heap_sort(lst): # build heap for i in range((len(lst)-1)>>1,-1,-1): heap_sort_helper(lst,i,len(lst)-1) for i in range(len(lst)-1,0,-1): lst[i],lst[0] = lst[0],lst[i] heap_sort_helper(lst,0,i-1)if __name__ == "__main__": lst = [random.randint(0,20) for i in range(10)] lst2 = copy.deepcopy(lst) lst2.sort() print(lst) print(lst2) heap_sort(lst) print(lst)
归并排序:
#! /usr/bin/env python#coding=utf-8import randomdef mergesort(seq): mid = len(seq) // 2 lft,rht = seq[:mid],seq[mid:] if len(lft) > 1: lft = mergesort(lft) if len(rht) > 1: rht = mergesort(rht) res = [] while lft and rht: #using pop to reduce data movements if lft[-1] >= rht[-1]: res.append(lft.pop()) else: res.append(rht.pop()) res.reverse() return (lft or rht) + resdef main(): seq = [random.randint(0,20) for i in range(10)] print(seq) seq = mergesort(seq) print(seq) if __name__ == "__main__": main()
0 0
- 快排、堆排和归并排序的Python实现
- 各种排序的实现:希尔 归并 堆排 快排
- 归并排序,堆排序,快排的简单实现
- 快排、归并排序、堆排序的实现
- 排序(快排,归并,堆排)
- 直插,快排,堆排,归并排序的分析
- 快排和归并排序的比较
- 快排和归并排序
- 快排与堆排序、归并排序的比较
- 快排、堆排、归并排 的理解
- 快排、归并、堆排序运用场景
- 堆排序、归并、快排、BSTree
- 快排和堆排序
- 快排和堆排序
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- 五种经典排序算法的实现(冒泡、归并、快排、堆排序、希尔)
- 排序算法 快排 堆排 选择 插入 希尔 归并
- 插入、希尔、快排、堆排、自然归并排序
- java之mongodb客户端开发(maven工程,使用mongodb jar包)
- java IO学习小结
- vim基本命令
- Erlang与C构建的节点通讯
- HDU 1010 -- Tempter of the Bone(dfs+奇偶剪枝)
- 快排、堆排和归并排序的Python实现
- tomcat部署多个网站
- 如何修复缺失Windows自带的exe文件(主要用于cmd) 如缺失SETX.exe
- Android常用工具类
- spark-1.2.0 集群环境搭建
- jQuery验证控件jquery.validate.js使用说明+中文API
- 计数、基数和桶排序的Python实现
- Callable和Future结合使用的一个例子
- 如果我们要将下表的数据添加到索引中