数据结构-排序与查找(python)
O__o吗果芒要
这个作者很懒,什么都没留下…
展开
-
插入排序
原理:从第一个元素开始,左边视为已排序数组,右边视为待排序数组,从左往右依次取元素,插入左侧已排序数组,对插入新元素的左侧数组重新生成有序数组class solution(object): def inserSort(self,array): for i in range(1, len(array)): if array[i - 1] > ...原创 2019-05-24 13:21:44 · 90 阅读 · 0 评论 -
冒泡排序
冒泡排序原理:重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的流程如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最...原创 2019-05-24 13:36:09 · 110 阅读 · 0 评论 -
选择排序
选择排序原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要 优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有...转载 2019-05-24 13:41:27 · 117 阅读 · 0 评论 -
快速排序
快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为"基准"(pivot),重新排序数列,所有元素比基准值...原创 2019-05-24 13:53:05 · 138 阅读 · 0 评论 -
希尔排序
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序的基本思想是:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进...原创 2019-05-24 13:57:03 · 87 阅读 · 0 评论 -
归并排序
归并排序是采用分治法:先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。----------------------------------------------------------归并排序:先分开再合并,分开...原创 2019-05-24 14:07:28 · 99 阅读 · 0 评论 -
递归详解
对递归最恰当的比喻,就是查词典。查词典的过程,本身就是递归。 想象用一本纯英文词典查单词,要查某一个单词的意思,翻到这个单词时,看解释, 发现解释中有一个单词不认识,所以,无法明白这个要查的单词是什么意思;这时,再用 这本词典(函数本身)查那个不认识的单词,又发现查的第2个单词的解释中又有一个单词 不认识,那么,又再用这本词典查第3个不认识的单词,这样,一个一个...原创 2019-05-24 14:21:06 · 76 阅读 · 0 评论 -
二分查找
二分搜索:有序数组中查找某一特定元素的搜索算法。搜索过程: 从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束; 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。 如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。 class solution(object): ...原创 2019-05-24 14:28:46 · 81 阅读 · 0 评论 -
非递归二分查找
class soulution(object): def binary_search(self,array, item): start = 0 end = len(array) - 1 while start <= end: mid = (start + end) // 2 if...原创 2019-05-24 14:33:37 · 377 阅读 · 0 评论