
数据结构与算法-Python实现
skyHdd
deep work,simple life
展开
-
【A-剑指offer】3-找出数组中的重复数字 python实现
'''Creat by HuangDandan2018-08-18题目描述:在一个长度为n的数组里的所有数字都在0~n-1的范围内,数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数字中任意一个重复的数字。例如,如果输入长度为7的数字{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3解题思路:思路1-直接对数组进行排序...原创 2018-08-18 15:09:16 · 2720 阅读 · 0 评论 -
【M-字符串匹配python实现】:朴素算法、KMP算法
字符串回溯匹配(朴素算法)'''Creat by HuangDandan2018-08-19dandanhuang@sjtu.edu.cn字符串匹配朴素算法算法基本思想:遇字符不等时将模式串p 右移一个字符,再次从p0(重置j = 0 后)开始比较最坏情况是每趟比较都在最后出现不等,最多比较n-m+1 趟,总比较次数为m*(n-m+1),所以算法时间复杂性为O(m*n)'...原创 2018-08-22 16:03:13 · 1570 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之10-基数排序(RadixSort)
基数排序基本思想: - 基数排序(Radix Sort)是桶排序的扩展,将整数按位数切割成不同的数字,然后按每个位数分别进行了多轮的桶排序。具体实现:从低位开始将待排序的数按照这一位的值放到相应的编号为0~9的桶中。等到低位排完得到一个子序列,再将这个序列按照次低位的大小进入相应的桶中,一直排到最高位为止,数组排序完成。 - 待排序的序列中的值必须是整数而且范围跨度不应太大,否则排序开...原创 2018-08-19 16:52:26 · 1580 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之9-桶排序(BucketSort)
桶排序基本思想: 基本思想很简单,如果有一个数组A,包含N个整数,值从1到M,桶排序(BucketSort)。留置一个数组S,里面含有M个桶,初始化为0。然后遍历数组A,读入Ai时,S[Ai]增一。所有输入被读进后,扫描数组S得出排好序的表。该算法时间花费O(M+N),空间上不能原地排序。'''Creat by HuangDandan2018-08-19Dandanhuang@sj...原创 2018-08-19 15:20:50 · 921 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之8-计数排序
计数排序计数排序步骤: 假设输入是一个数组Lst[0…n-1],Lst.length=n,我们还需要两个数组,B[0…n-1]存放排序的输出,Temp[0…k]提供临时存储空间。 1-第一个for循环后,C中存放的是等于i的元素的个数。 2-第二个for循环后,C中存放的是小于或者等于i元素的总数。 3-第三个for循环,可以把每个元素A[j]放到它在输出数组B中的正确位置上。'...原创 2018-08-18 16:23:07 · 250 阅读 · 2 评论 -
【S-排序】python实现八大排序算法之7-归并排序
归并排序描述 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令...原创 2018-08-18 16:20:18 · 220 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之6-堆排序(Heap Sort)
堆排序(Heap Sort)堆排序 由二叉堆的定义可知,堆顶元素(即二叉堆的根节点)一定为堆中的最大值或最小值,因此如果我们输出堆顶元素后,将剩余的元素再调整为二叉堆,继而再次输出堆顶元素,再将剩余的元素调整为二叉堆,反复执行该过程,这样便可输出一个有序序列,这个过程我们就叫做堆排序。'''Creat by HuangDandan2018-08-15dandanhuang@...原创 2018-08-18 16:15:29 · 1484 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之5-快速排序
快速排序快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。'''Creat by HuangDandan2018-08-14dandanhuang@sjtu.edu.cn快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。 特别是python能用一句话实现快速排序。 #思路说明 快速排序是C.R.A.Hoare于1962...原创 2018-08-18 16:08:19 · 329 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之4-希尔排序ShellSort
希尔排序ShellSort起源:直接插入法的改进算法。希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。希尔排序【缩小增量排序算法】基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键...原创 2018-08-18 15:56:12 · 942 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之3-插入排序
插入排序算法原理:python顺序表插入法排序:插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表优点:稳定,快; 缺点:比较次数不一定,比较次数越多,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。算法复杂度: - 如果目标是把n个元素的序列升序排列,那么采用...原创 2018-08-18 15:45:49 · 963 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之2-选择排序(Selection Sort)
选择排序(Selection Sort)算法原理:每次排序默认开始的下标为i的元素为最小值,后面j的循环查找下表为i+1之后序列的最小值的下标,查找出来之后再将这个最小值与开始默认开头的最小值交换。每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。...原创 2018-08-18 15:40:26 · 726 阅读 · 0 评论 -
【S-排序】python实现八大排序算法之1-冒泡排序改进
python实现八大排序算法排序是计算机内经常进行的一种操作,其目的是将一组”无序”的记录序列调整为”有序”的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能完全在内存中完成,需要访问外存,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。假定在待排序的...原创 2018-08-18 15:26:52 · 265 阅读 · 1 评论 -
【A-查找】1-有序数组二分法查找 递推和循环 python实现
二分查找:前提:正序数列 例如:一个长度为n的正序数列,查找一个数 target是否在这个数列当中 (1)递归实现: 1-取数列正中间的数mid, 如果mid和x相等,则找到结果,查找成功 返回True 如果mid比x大,则x应该在mid的左侧,我们把mid左侧当作一个新的数列li 如果mid比x小,则x应该在mi...原创 2018-08-24 16:31:46 · 659 阅读 · 0 评论