算法
左岸小贼
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
图示经典算法--快速排序
快速排序快速排序是一种分治的排序算法,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。class QuickSort(object): """快速排序""" @classmethod def sort(cls, a):原创 2016-03-29 19:45:17 · 962 阅读 · 0 评论 -
图示经典算法--三向切分的快速排序
三向切分的快速排序对于含有大量重复元素的数组,使用三向切分快速排序堆快速排序进行改进。从左到右遍历数组一次,维护一个指针lt使得a[lo..lt-1]中的元素小于,一个指针gt使得a[gt+1..hi]中的元素都大于v,一个指针i使a[lt..i-1]中的元素都等于v,a[i..gt]中的元素都还未确定。 a[i]小于v,将a[lt]和a[i]交换,将lt和i减一; a[i]大于v,将a[gt]和a原创 2016-03-31 19:15:48 · 1424 阅读 · 0 评论 -
图示经典算法--选择排序
选择排序 找到数组中最小的元素a 将a和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么a就和自己交换) 在剩余的元素中找到最小的元素,将它和数组的第二个元素交换位置 如此往复,直到将整个数组排序 def selection_sort(data): n = len(data) # 外循环,给第i个位置交换数据 for i in range(n): m原创 2016-03-23 19:00:43 · 545 阅读 · 0 评论 -
图示经典算法--插入排序
插入排序插入排序基本思路,将待排序数据插入已经排序的数据的适当位置def insertion_sort(data): n = len(data) # 外循环 for i in range(1, n): j = i # 对索引i左侧数据排序,保证索引i左侧数据是有序的 while j > 0 and data[j] < data[原创 2016-03-25 19:46:14 · 559 阅读 · 0 评论 -
图示经典算法--希尔排序
希尔排序希尔排序是插入排序的一种。 确定排序间隔h 按照间隔h对数组排序,保证间隔为h的元素是有序的 缩小h值,再对间隔h数组排序,直到h为1 def shell_sort(a): n = len(a) h = 1 while h < n // 3: # 计算间隔 h = 3 * h + 1 # 1, 4, 13 while h >=原创 2016-03-26 11:05:03 · 827 阅读 · 0 评论 -
图示经典算法--自顶向下的归并排序
自顶向下的归并排序归并排序使用分治思想,将两个子数组排序,通过归并两个子数组来将整个数组排序class TopDownMergeSort(): """自顶向下的归并排序""" @classmethod def merge(cls, a, lo, mid, hi): # 将a[lo...hi]复制到aux[lo...hi] cls.aux[lo:h原创 2016-03-26 15:54:04 · 1022 阅读 · 0 评论 -
图示经典算法--自底向上的归并排序
自底向上的归并排序自底向上的归并排序使用分治思想,将数组先两两归并,再四四归并,然后八八归并,直到整个数组有序。class MergeBU(object): """docstring for MergeBU""" @classmethod def merge(cls, a, lo, mid, hi): # 将a[lo...hi]复制到aux[lo...hi]原创 2016-03-26 16:25:40 · 1095 阅读 · 0 评论
分享