Python实现常用排序算法总结
2017-05-25 11:29
525 查看
一、概述
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。
快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;
二、算法实现
1. 交换排序之冒泡排序(Bubble Sort)
冒泡排序的时间复杂度是O(N^2)冒泡排序的思想: 每次比较两个相邻的元素, 如果他们的顺序错误就把他们交换位置
冒泡排序原理: 每一趟只能将一个数归位, 如果有n个数进行排序,只需将n-1个数归位, 也就是说要进行n-1趟操作(已经归位的数不用再比较)
比如有五个数: 12, 35, 99, 18, 76, 从大到小排序, 对相邻的两位进行比较
第一趟:
第一次比较: 35, 12, 99, 18, 76
第二次比较: 35, 99, 12, 18, 76
第三次比较: 35, 99, 18, 12, 76
第四次比较: 35, 99, 18, 76, 12
经过第一趟比较后, 五个数中最小的数已经在最后面了, 接下来只比较前四个数, 依次类推
第二趟
99, 35, 76, 18, 12
第三趟
99, 76, 35, 18, 12
第四趟
99, 76, 35, 18, 12
比较完成
#!/usr/bin/env python # coding:utf-8 def bubbleSort(lists): count=len(lists) for i in range(count-1): # 这个循环负责设置冒泡排序进行的次数 for j in range(count-i-1): # j为列表下标 if lists[j] > lists[j+1]: lists[j], lists[j+1] = lists[j+ 4000 1], lists[j] return lists lists = [43,19,28,38,56,73,99,49,66] print (bubbleSort(lists))
2.交换排序之快速排序(Quick Sort)
基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
lists=[55,46,37,99,16,81,73,61,19,49] def quick_sort(lists, left, right): # 快速排序 if left >= right: return lists key = lists[left] low = left high = right while left < right: while left < right and lists[right] >= key: right -= 1 lists[left] = lists[right] while left < right and lists[left] <= key: left += 1 lists[right] = lists[left] lists[right] = key quick_sort(lists, low, left - 1) quick_sort(lists, left + 1, high) return lists print quick_sort(lists, left=0, right=len(lists)-1)
3.归并排序(merge sort)
基本思想:
归并排序是一种典型的分治思想,把一个无序列表一分为二,对每个子序列再一分为二,继续下去,直到无法再进行划分为止。然后,就开始合并的过程,对每个子序列和另外一个子序列的元素进行比较,依次把小元素放入结果序列中进行合并,最终完成归并排序。
lists = [43,19,28,38,56,73,99,49,66] def merge(left, right): i, j = 0, 0 result = [] while i < len(left) and j < len(right): if left[i] <= right[j]: result.append(left[i]) i += 1 else: result.append(right[j]) j += 1 result += left[i:] result += right[j:] return result def merge_sort(lists): # 归并排序 if len(lists) <= 1: return lists num = len(lists) / 2 left = merge_sort(lists[:num]) right = merge_sort(lists[num:]) return merge(left, right) print merge_sort(lists)
4.插入排序之直接插入排序(Straight Insertion Sort)
相关文章推荐
- 常用排序算法总结---Java实现
- ZH奶酪:【数据结构与算法】基础排序算法总结与Python实现
- 排序算法总结(python实现)
- 时间复杂度为O(N)的常用排序算法总结与Java实现
- Python代码常用功能实现总结
- python实现常用排序算法
- Python实现: 常用排序算法 & 二叉树的遍历算法
- 常用排序算法的Python实现
- Python - 常用的几种排序算法总结
- 排序算法实现与总结Python/Java
- 经典排序算法总结与实现 ---python
- 算法基础——十种常用排序算法的Java及Python实现
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 常用排序算法的Python实现
- 排序算法总结-python实现
- 排序算法总结以及python代码实现
- Python实现各种排序算法的代码示例总结
- 排序算法总结(归并排序、快速排序)(python实现)
- 常用排序算法总结(python)
- python实现常用排序算法