要求
有一个无序数组,找到其中能被2,3整除的数排序,剩下的数也排序后跟在后面
面试官偏爱
1.排序算法抽象成方法 2.用效率更高的排序算法
我的答案
用 的冒泡排序,大家可以随意选排序算法
# encoding:utf-8
import random
import time
# 生成随机数 x个
r_list=[]
for i in range(10):
r_list.append(random.randint(1, 100))
print r_list
# 冒泡排序
def sort(list=[]):
length = len(list)
for i in range(0, length):
for j in range(i+1, length):
if list[i]>list[j]:
c = list[i]
list[i] = list[j]
list[j] = c
return list
#开始时间
starttime=time.clock()
# 排序
newlist=sort(r_list)
print newlist
# 类似插队方法
myindex=0
for k in range(len(newlist)):
# 题目要求 能被2,3 zhengchu
if(newlist[k]%2==0 or newlist[k]%2==0 ):
print newlist[k],k
c=newlist[k]
newlist.insert(myindex,c)
newlist.pop(k+1)
myindex = myindex + 1
print r_list
# 结束时间
endtime=time.clock()
total_time1=endtime-starttime
print("总耗时:"+str(total_time1))
starttime=time.clock()
a_list=[]
b_list=[]
# 取出题目要求的shu
for k in range(len(r_list)):
if (r_list[k] % 2 == 0 or r_list[k] % 2 == 0):
a_list.append(r_list[k])
else:
b_list.append(r_list[k])
a_list=sort(a_list)
print a_list
b_list=sort(b_list)
print b_list
a_list.extend(b_list)
print a_list
endtime=time.clock()
total_time=endtime-starttime
print("总耗时:"+str(total_time))
比较
对比了两个方法,还是第二个方法速度快
[81, 44, 43, 19, 47, 6, 80, 27, 67, 13]
[6, 13, 19, 27, 43, 44, 47, 67, 80, 81]
6 0
44 5
80 8
[6, 44, 80, 13, 19, 27, 43, 47, 67, 81]
总耗时:0.00027783459092
[6, 44, 80]
[13, 19, 27, 43, 47, 67, 81]
[6, 44, 80, 13, 19, 27, 43, 47, 67, 81]
总耗时:0.000222121058176
Process finished with exit code 0