数据结构与算法
翻滚吧挨踢男
勤能补拙
展开
-
Python一日一练09----奇偶排序
原理奇偶排序法的思路是在数组中重复两趟扫描。第一趟扫描选择所有的数据项对,a[j]和a[j+1],j是奇数(j=1, 3, 5……)。如果它们的关键字的值次序颠倒,就交换它们。第二趟扫描对所有的偶数数据项进行同样的操作(j=2, 4,6……)。重复进行这样两趟的排序直到数组全部有序。代码#coding=utf-8__author__ = 'a359680405'import timedef ex原创 2016-04-07 14:30:13 · 2202 阅读 · 0 评论 -
Python一日一练17----哈希查找
介绍哈希查找是通过计算数据元素的存储地址进行查找的一种方法。比如”5“是一个要保存的数,然后我丢给哈希函数,哈希函数给我返回一个”2”,那么此时的”5“和“2”就建立一种对应关系,这种关系就是所谓的“哈希关系”,在实际应用中也就形成了”2“是key,”5“是value。哈希必须要遵守两点原则: ①: key尽可能的分散,也就是我丢一个“6”和“5”给你,你都返回...原创 2016-04-14 15:42:32 · 6754 阅读 · 5 评论 -
Python一日一练10----快速排序
基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数原创 2016-04-08 11:30:50 · 1098 阅读 · 0 评论 -
Python一日一练11----选择排序
介绍选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。代码#coding=utf-8__author__ = 'a359680405'import time#计算运行时间def exeTime(func): def wrapper(array):原创 2016-04-08 13:58:14 · 1001 阅读 · 0 评论 -
Python一日一练12----堆排序
介绍堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。至于什么是堆,可以参考这篇文章。大(小)根堆排序算法的基本操作: ①建堆,建堆是不断调整堆的过程,用筛选法依次将R[n/2]、R[n/2-1]······R[1]为根节点的二叉树调整为大(小)根堆。 ②调整堆:调整堆在构建堆的过程中会用到,而且在堆排序过程中也会用到。 比较节点i和它的孩子节点left(i)原创 2016-04-11 16:20:45 · 2417 阅读 · 0 评论 -
Python一日一练13----插入排序
介绍直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。源码#coding=utf-8__author__ = 'a359680405'import time#运行时间def exeTime(func): def wrapper(x): start=tim原创 2016-04-11 17:07:43 · 1158 阅读 · 0 评论 -
Python一日一练14----希尔排序
介绍希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。代码#coding=utf-8__aut原创 2016-04-13 10:01:00 · 2750 阅读 · 0 评论 -
Python一日一练15----归并排序
介绍归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并排序的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先原创 2016-04-13 16:52:05 · 2887 阅读 · 0 评论 -
Python一日一练16----折半查找
介绍二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复原创 2016-04-14 10:52:09 · 3963 阅读 · 0 评论 -
Python一日一练07----冒泡排序
冒泡排序是非常容易理解和实现,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 3.N=N-1,如果N不为0就重复前面二步,否则排序完成。def bubbleSort1(num_array): #基础版原创 2016-04-06 15:58:10 · 4039 阅读 · 0 评论 -
Python一日一练08----鸡尾酒排序
概述鸡尾酒排序也就是定向冒泡排序, 鸡尾酒搅拌排序, 搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序, 是冒泡排序的一种变形。此演算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。原理使用鸡尾酒排序为一列数字进行排序的过程可以通过下图形象的展示出来: 数组中的数字本是无规律的排放,先找到最小的数字,把他放到第一位,然后找到最大的数字放到最后一位。原创 2016-04-07 11:26:47 · 2575 阅读 · 0 评论