算法:解决问题的步骤
算法+数据结构=程序
算法1:查找,移除,查找,寻找一个列表内最小的两个数及其索引值
#算法:解决问题的步骤,可以用自然语言或者数学表达式来表达,最后用一门编程语言,如c、python、java等来翻译实现算法
counts=[122,33,442,12,4566,889l,54,678,20]
min(counts)
low=min(counts)
min_index=counts.index(low)
print min_index
#we can using another easier way
counts.index(min(counts))
#自定而下的算法设计方法,下面介绍三种找最小值和索引的算法
#查找,移除,查找
"""
return a tuple of the indexes of the two smallest values in list
"""
#该算法主要思路是:首先找到最小值,并找到索引,然后移除,找新的列表最小值和索引值,返回索引值+1
#针对一个列表L,python有函数能够求最小值,求索引,插入,删除等操作
def find_two_smallest(L):
smallest=min(L) #求列表L的最小值
min1=L.index(smallest) #求索引
L.remove(smallest) #移除最小值
next_smallest=min(L) #下一个最小值
min2=L.index(next_smallest) #index
#插入移除的数值
L.insert(min1,smallest) #2个变量,第一个是值,第二个是插入的位置
if min1<=min2:
min2+=1
return (min1,min2)
S=[1,2,2,3,3,4,5,56,6,78,9,]
a=find_two_smallest(S)
print a
#输出结果:a=(0,1)
算法二:排序,标识最小元素,索引
#算法思路,首先将列表排序,然后0和1号的元素就是最小值。
def find_two_smallest(L):
"""
return two smallest values in list L:
"""
temp=L[:]
temp.sort()
smallest=temp[0]
next_smallest=temp[1]
min1=L.index(smallest)
min2=L.index(next_smallest)
# return min1
# return min2
return(min1,min2)
L=[1,2,3,4,5,5,65,6,0,-1]
find_two_smallest(L)
a=find_two_smallest(L)
#a(0)
for i in range(len(a)):
print a[i]
算法三:扫描排序
def find_two_smallest(L):
'''return two small nums '''
if L[0]<L[1]:
min1,min2=0,1
else:
min2,min1=0,1
for i in range(2,len(L)):
if L[i]<L[min1]:
min2=min1
min1=i
elif L[i]<L[min2]:
min2=i
return (min1,min2)
L=[1,2,3,4,5,5,65,6,0,-1]
#find_two_smallest(L)
a=find_two_smallest(L)
#a(0)
for i in range(len(a)):
print a[i]
计时
时间复杂度和空间复杂度是衡量代码好坏的重要标准,即你所编写的代码在运行过程中所消耗的内存和时间。