数据结构与算法
各种算法编程思路
diyuzhiwaicc
这个作者很懒,什么都没留下…
展开
-
组合最大数
题目:组合最大数输入:输入一个多个数字组成的字符串,数字之间以逗号隔开。输出:输出多个数字组成的最大数,最大数以字符串的形式输出。输入举例:7,1212,568,121,81,333输出举例:8175683331212121解题思路:可以将组合最大数的问题理解成数组排序的问题,在python里就是列表排序的问题。定义函数compare逐位比较两个连接字串str1=str1+str2和str2=str2+str1,当两字串数字相等时,继续往下比较,当str1[i]>str2[i]时返回True原创 2021-04-09 17:21:11 · 1055 阅读 · 0 评论 -
排序算法6—归并排序
归并排序是采用分治法的一个非常典型的应用,另一个可以采用分治法的是快速排序,归并算法比快速排序速度稍低。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。如 设有数列{6,202,100,301,38,8,1}初始状态:6,202,100,301,38,8,1第一次归并后:{6,202},{100,301},原创 2021-02-08 09:49:58 · 278 阅读 · 0 评论 -
排序算法5—快速排序
快速排序,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 原理:从序列中找出一个基准元素,然后大于该元素的放到一边,小于该元素的放到另一边形成分区;然后在分别冲大小分区中再找基准再分别分出相对大小分区,这样递归的完成快速排序。图解算法:1)初始状态,设置基准值,将数组中的第一个值作为基准值,即数字6。2)第一次循环,j找到小于6的值后,停止原创 2021-02-08 09:44:46 · 110 阅读 · 0 评论 -
排序算法4—希尔排序
希尔排序是插入排序的一种又称“缩小增量排序”,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止. 希尔排序的核心是对步长的理解,步长是进行相对比较的两个元素之间的距离,随着步长的减小,相对元素的大小会逐步区分出来并向两端聚拢,当步长为1的时候,就完成最后一次比较,那么序列顺序就出来了。 如上面实例:第一次排序原创 2021-02-08 09:31:49 · 453 阅读 · 0 评论 -
排序算法3—插入排序
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。算法步骤:将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)排序思路:(假设从小到大)python实现1:pytho原创 2021-02-08 09:10:59 · 53 阅读 · 0 评论 -
排序算法2—选择排序
选择排序,简单而直观,其原理是把序列中的最小值或者最大值找出来放在起始位置,然后再从剩下的序列中找出极值放到起始位置之后,以此类推最后就完成排序。python实现:运行结果:原创 2021-02-07 16:34:00 · 97 阅读 · 1 评论 -
排序算法1—冒泡排序
冒泡排序:一个经典的排序算法,因在算法运行中,极值会像水底的气泡一样逐渐冒出来,因此而得名。冒泡排序的过程是比较两个相邻元素的大小,然后根据大小交换位置,这样从列表左端开始冒泡,最后最大值会依次从右端冒出。python实现:运行结果: python实现冒泡排序的核心思想是通过从列表一端迭代循环元素,再通过一个循环让这个元素之后的元素相邻两个比较,从而依次将最大值移动到最末端。 关于冒泡排序的时间复杂度,在上面python实现的代码中时间复杂度是Ο(n^2 ),当然可以再考虑一下极端的情况:当原创 2021-02-07 16:27:45 · 70 阅读 · 0 评论