python内排序算法(冒泡 插入 选择 堆 归并 快排)
来源:互联网 发布:js访问器属性有什么用 编辑:程序博客网 时间:2024/05/18 20:06
小白表示开始理解比较抽象 多看看习惯就好了~(翻白眼)
1、冒泡(n^2)
#正常def bubble_sort(lst): l = len(lst) - 1 while l > 0: for i in range(0, l): # 0<=i<l if lst[i] < lst[i+1]: lst[i], lst[i+1] = lst[i+1], lst[i] l -= 1 return lst
# 优化def bubble_sort(lst): l = len(lst) - 1 while l > 0: flag = True for i in range(0, l): # 0<=i<l if lst[i] < lst[i+1]: lst[i], lst[i+1] = lst[i+1], lst[i] flag = False if flag: return lst l -= 1 return lst
2、插入排序(n^2)
# 正常def insert_sort(lst): l = len(lst) for i in range(1, l): tmp = lst[i] for j in range(i - 1, -1, -1): if lst[j] > tmp: lst[j + 1] = lst[j] lst[j] = tmp return lst
# 二分插入def insert_sort(lst): for i in range(1, len(lst)): left = 0 right = i - 1 tmp = lst[i] while left <= right: mid = (left + right) / 2 if tmp >= lst[mid]: left = mid + 1 if tmp < lst[mid]: right = mid - 1 for j in range(i - 1, left - 1, -1): # [i-1,left] lst[j + 1] = lst[j] lst[left] = tmp return lst
3、选择排序(n^2)
def select_sort(lst): l = len(lst) for i in range(0, l): min_tag = i for j in range(i + 1, l): if lst[min_tag] > lst[j]: min_tag = j lst[min_tag], lst[i] = lst[i], lst[min] return lst
4、堆排序(N*logN)
def heap_sort(lst): l = len(lst) - 1 k = l / 2 while k >= 0: heap_one(lst, l, k) k -= 1 for i in range(0, l + 1): lst[0], lst[l - i] = lst[l - i], lst[0] heap_one(lst, l - i, 0) return lstdef heap_one(arr, l, k): k1 = 2 * k + 1 k2 = 2 * k + 2 max_tag = k if k1 < l and arr[k1] > arr[max_tag]: max_tag = k1 if k2 < l and arr[k2] > arr[max_tag]: max_tag = k2 if max_tag != k: arr[k], arr[max_tag] = arr[max_tag], arr[k] heap_one(arr, l, max_tag)
5、归并排序(N*logN)
def merge_sort(lst): l = len(lst) if l == 1: return lst mid = l / 2 left = merge_sort(lst[:mid]) right = merge_sort(lst[mid:]) return merge_arr(left, right)def merge_arr(left, right): i = 0 j = 0 ret = [] while i < len(left) and j < len(right): if left[i] <= right[j]: ret.append(left[i]) i += 1 else: ret.append(right[j]) j += 1 ret = ret + left[i:] + right[j:] return ret
6、快速排序(N*logN)
def quick_sort(lst, left, right): if left >= right: return lst i = left j = right tmp = lst[i] while i < j: while i < j and lst[j] > tmp: j -= 1 lst[i] = lst[j] while i < j and lst[i] < tmp: i += 1 lst[j] = lst[i] lst[i] = tmp quick_sort(lst, left, i - 1) quick_sort(lst, j + 1, right) return lst
0 0
- python内排序算法(冒泡 插入 选择 堆 归并 快排)
- 排序算法:快排,插入,希尔,归并,堆,选择,冒泡
- 排序(快排,冒泡,堆排序,插入排序,归并排序,选择排序)算法Java实现
- 各种排序算法(冒泡、选择、快排、插入、希尔、堆排、归并、计数、基数)
- 常见排序算法总结与实现(冒泡、插入、选择、希尔、堆排序、归并、快排)
- 常见排序算法C++实现(冒泡,直接插入,希尔,堆,归并,简单选择,快排)
- 八种排序算法(直接插入,希尔,直接选择,堆,冒泡,快排,归并,基数)
- 常用排序算法(冒泡、选择、归并、快排、插入)
- (冒泡,选择,插入,归并,堆排)排序算法
- 排序算法 快排 堆排 选择 插入 希尔 归并
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- 各类排序C++实现(冒泡,选择,插入,快排,归并,堆排)
- C++实现各种基础排序(冒泡、选择、快排、插入、堆排、希尔、归并)
- 学生成绩排序(直接插入,冒泡,快排,选择,堆排,2路归并)
- 冒泡,选择,快排,归并,堆排序算法
- 常用的排序算法 插入-冒泡-选择-归并-快排
- 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)
- 链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序)
- jquery ajax学习笔记
- 测试
- java将域名解析为IP地址
- RedHat搭建NFS服务以及问题的解决办法
- Ext可编辑表格中timefield选择后会显示中国标准时间
- python内排序算法(冒泡 插入 选择 堆 归并 快排)
- 使用csdn的第一篇文章——java基础
- iOS 提交app到appstore步骤
- git reset 的使用
- 遍历js中对象的属性和值
- 移动端左划右划事件触发简单的代码
- dubbo通信协议之对比
- Qt事件机制的小实验
- Mysql数据库部分笔记