用Python写的几个排序算法
来源:互联网 发布:c wpf编程 编辑:程序博客网 时间:2024/05/22 08:00
用Python练习写一些常用的排序算法
# -*- coding:utf-8 -*-"""选择排序"""def selectSort(arr): print('this is select sort') for i in range(0, len(arr)): min = arr[i] index = i for j in range(i + 1, len(arr)): if(arr[j] < min): min = arr[j] index = j arr[index] = arr[i] arr[i] = min"""冒泡排序"""def insertSort(arr): print('this is insert sort') for i in range(0, len(arr)): for j in range(i + 1, len(arr)): if arr[j] < arr[i]: t = arr[i] arr[i] = arr[j] arr[j] = t"""快速排序"""def quickSort(arr, left, right): if left >= right: return i = left j = right key = arr[left] while i < j: # j向左走,直到找到一个小于key的元素 while i < j and arr[j] >= key: j -= 1 if i < j: arr[i] = arr[j] i += 1 # i向右走,直到找到一个大于key的元素 while i < j and arr[i] <= key: i += 1 if i < j: arr[j] = arr[i] j -= 1 arr[i] = key quickSort(arr, left, i - 1) quickSort(arr, i + 1, right)"""归并排序"""def mergeSort(arr, start, end): if start < end: mid = (int)((start + end) / 2) mergeSort(arr, start, mid) mergeSort(arr, mid + 1, end) merge(arr, start, mid, mid + 1, end)def merge(arr, s1, e1, s2, e2): i = s1 j = s2 list = [] while i <= e1 and j <= e2: if arr[i] <= arr[j]: list.append(arr[i]) i += 1 else: list.append(arr[j]) j += 1 while i <= e1: list.append(arr[i]) i += 1 while j <= e2: list.append(arr[j]) j += 1 for i in range(s1, max(e1, e2)+1): arr[i] = list[i-s1]"""堆排序构建一个小顶堆,父节点的值小于孩子节点假设我们需要从海量的数据中找到前k大的数,最好的方法是构建小顶堆首先用前k个数构建一个小顶堆,然后遍历剩余的数如果此数 < 堆顶元素,说明比k个数中的最小值还小,则直接跳过此数,遍历下一个如果此数 > 堆顶元素,则将此数和堆顶交换,然后从堆顶向下调整"""class MinHeap(object): __max_size = 0; #堆的大小 heap_list = [] # 创建堆 def create_heap(self, arr): self.heap_list = arr n = len(self.heap_list) for i in range(int(n / 2) - 1, -1, -1): self.fix_down(i, n-1) # 取出堆顶元素 def get_top(self): if len(self.heap_list) > 0: return self.heap_list[0] return None # 向下调整堆 def fix_down(self, a, end): last = end child = a * 2 + 1 #当前节点的左孩子 temp = self.heap_list[a] while child <= last: # 选出两个孩子中较小的那个 if child < last and self.heap_list[child+1] < self.heap_list[child]: child += 1 if temp < self.heap_list[child]: break else: # 孩子节点覆盖当前节点 self.heap_list[a] = self.heap_list[child] a = child child = child * 2 + 1 self.heap_list[a] = temp print(self.heap_list) # 堆排序,取出堆顶元素,与最后一个元素交换,调整堆 def heap_sort(self): n = len(self.heap_list) - 1 for i in range(n, -1, -1): temp = self.heap_list[i] self.heap_list[i] = self.heap_list[0] self.heap_list[0] = temp self.fix_down(0, i-1) return self.heap_listdef heapSort(arr): m = MinHeap() m.create_heap(arr) print('开始排序') return m.heap_sort() arr = [19, 17, 20, 18, 16, 21]# selectSort(arr)# insertSort(arr)# quickSort(arr, 0, len(arr) - 1)# mergeSort(arr, 0, len(arr) - 1)heapSort(arr)# print(arr)# print(arr)
阅读全文
0 0
- 用Python写的几个排序算法
- Python 下写的几个排序算法
- 用JavaScript写几个排序算法
- 用Python写排序算法
- 用Python 和 Java 写的Sunday字符串排序算法
- 用JavaScript写的几个排序
- javascript和python写的选择排序算法
- 用as写了几个常见的排序
- 几个经典的排序算法
- 几个常用的排序算法
- 几个常用的排序算法
- 几个基础的排序算法
- 几个简单的排序算法
- 几个简单的排序算法
- 几个普通的排序算法
- 几个简单的排序算法
- 几个简单的排序算法
- 用java写的冒泡排序算法
- 安卓之路----日记一
- Mac环境下安装Flask
- eclipse快捷键
- getSuperclass和getGenericSuperclass区别(java泛型和反射综合应用)
- 窗体部件之QWizard
- 用Python写的几个排序算法
- 系统启动不了的情况下用PE查看网络IP配置信息(Windows系列系统)
- 基于Socket网络编程
- 2017-6-22:一个事物的重要性只有当你在某个时候因为它而停滞不前或让你很步爽时你才会意识到
- 如何做微信公众平台联合登陆 ?
- java中如何处理异常代码示例
- 减少上下文切换实战
- Struts2 S:textfield标签回填日期字段
- Jsp有哪些内置对象?作用分别是什么?