前言:大家好啊,由于最近准备大学生计算机能力联赛的复赛,没时间进行更新,好不容易有了时间,总算可以坐在椅子前和大家一起讨论关于新的知识了,让大家久等啦.
说到算法,大家最先想到的应该是排序算法吧,这也是学算法刚开始最容易接触到的东西,确实是很重要的,假设现在我们要有一个一维数组,对应的数值是随机的,利用random模块实现它,如果让你进行排序,用python来说再简单不过,但是如果让你对他们的差值做一个排序呢,就是让你输出在数轴上距离最近的两个数字.
对刚开始学习不久的孩子来说似乎有点棘手.
不知道大家对于排序的了解有多少,不过这个列表的排序的解决过程或许会给你的编程思想的提高带来一些帮助,首先我们拿到这个问题,应该想的是怎么去达到比较差值大小,实现了这个再去实现那些细枝末节,有了从中心出发的思想,我们就很容易想到肯定要用到一个变量用来保存对应的差值,并且实时比较和更新,如果有更合适(更大)的值,就将他替换,于是我们最初的实现差值比较的想法,利用一个变量,那么接下来的问题就是遍历这个以为数组了,如果在这里你思考了超过十秒钟,那我觉得你该复习复习基础了,很容易想到利用两个嵌套的for循环,进行一对一的比较,比如a[0]和a[1]
a[0]和a[2]
a[0]和a[3]
a[0]和a[4]
......
....
...
..
.
那么基本的路线有了,那我们开始这个算法的python代码实现:
首先创建一个list,利用random模块的randrange函数进行随机数填充
定义一个无穷大的变量a
接下来进行正式的比较内容:
第一个for循环遍历一遍数组,从0开始到len(list1)
第二个循环,同样遍历一遍数组,与外层循环进行比较:
在里面通过abs()函数进行基本的计算,得到对应的差值赋值给变量d
将d和a进行比较大小,将较小值赋值给a(如果我们的要求是求出差值最小的两个数的话)
将此时对应的外层循环遍历得到的数字和内层循环遍历得到的数字赋值给另外两个变量,为了方便输出和下一次比较
循环结束,打印输出对应的值.
以上是很伪代码的描述,接下来贴出代码,配合食用风味更佳哦:
from random import randrange
list1 = [randrange(10*10)for i in range(100)]#首先创建一个list,利用random模块的randrange函数进行随机数填充
a = float("inf")#定义一个无穷大的变量a#接下来进行正式的比较内容:
for t in list1:
for u in list1:
if t == u:
continue#只有傻子才会在这里自己和自己比较吧
d = abs(t-u)
if d < a:#将d和a进行比较大小,将较小值赋值给a(如果我们的要求是求出差值最小的两个数的话)
tt,uu,a = t,u,d
print(tt,uu,a)#打印输出需要的两个值和最小的差值
最后我们很容易得到两个间隔最小的数字:
即使是更大一些的数字也不会出错:
个人QQ :2533524298
欢迎交流