算法

  1 #递归
  2 def fun(x):
  3     if x>0:
  4         fun(x-1)
  5         print(x)
  6 # fun(2)
  7 
  8 # print(4/2)
  9 # lis=[
 10 # {'id':1001, 'name':"张三", 'age':20},
 11 # {'id':1002, 'name':"李四",'age':25},
 12 # {'id':1003, 'name':"李四2",'age':25},
 13 # {'id':1004, 'name':"王五", 'age':23},
 14 # {'id':1005, 'name':"王五2", 'age':23},
 15 # {'id':1006, 'name':"王五3", 'age':23},
 16 # {'id':1007, 'name':"王五4", 'age':23},
 17 # {'id':1008, 'name':"王五5", 'age':23},
 18 # {'id':1009, 'name':"王五5", 'age':23},
 19 # {'id':10010, 'name':"王五7", 'age':23},
 20 # {'id':10011, 'name':"王五8", 'age':23},
 21 # {'id':10012, 'name':"赵六", 'age':33}
 22 # ]
 23 
 24 
 25 #二分叉
 26 # def select_stu(list,id):
 27 #     low=0
 28 #     high=len(list)-1
 29 #     while low<=high:
 30 #         mid=int((low+high)/2) #用low+high)//2就不需要转换了,//去掉小数
 31 #         if lis[mid]['id']==id:
 32 #             return lis[mid]['id'],lis[mid]['name'],lis[mid]['age']
 33 #         elif lis[mid]['id']>id:
 34 #             high=mid-1
 35 #         elif lis[mid]['id']<id:
 36 #             low=mid+1
 37 #         else:
 38 #             return '不存在'
 39 # print(select_stu(lis,1001))
 40 
 41 # lis=[6,11,3,9,8,9,2,4,5,7,8,7,4]
 42 
 43 #冒泡排序,自己写的冗余了
 44 # lis=[11,3,9,8,9,2,4,5,7,8,7,4]
 45 # for i in range(len(lis)):
 46 #     for j in range(i,len(lis)):
 47 #         if lis[i]>lis[j]:
 48 #             lis[i],lis[j]=lis[j],lis[i]
 49 
 50 #冒泡排序,正确的冒泡排序
 51 # for i in range(len(lis)-1):
 52 #     for j in range(len(lis)-i-1):
 53 #         if lis[j]<lis[j+1]:
 54 #             lis[j],lis[j+1]=lis[j+1],lis[j]
 55 
 56 # lis=[11, 9, 9, 8, 8, 7, 7, 5, 4, 4, 3, 2]
 57 #冒泡排序,优化,如果没有交换两个参数,那么说明排序就是正确的
 58 # for i in range(len(lis)-1):
 59 #     for j in range(len(lis)-i-1):
 60 #         flg=True
 61 #         if lis[j]<lis[j+1]:
 62 #             lis[j],lis[j+1]=lis[j+1],lis[j]
 63 #             flg=False
 64 #         if flg:
 65 #             print(lis)
 66 #             exit('提前结束')
 67 
 68 #选择排序,选出最小的数,放左边,然后选出剩下数组的最小数,放左边,依次选下去
 69 # lis=[11,3,9,8,9,2,4,5,7,8,7,4]
 70 # for i in range(len(lis)-1):
 71 #     min_var=i
 72 #     for j in range(i+1,len(lis)):
 73 #         if lis[j]<lis[min_var]:
 74 #             min_var = j
 75 #     if min_var!=i:
 76 #         lis[min_var],lis[i]=lis[i],lis[min_var]
 77 # print(lis)
 78 #自己捣鼓的
 79 # for i in range(len(lis)-1):
 80 #     min_data = lis[i]
 81 #     for j in range(i+1,len(lis)):
 82 #         if lis[j]<min_data:
 83 #             lis[j],min_data=min_data,lis[j]
 84 #         lis[i]=min_data
 85 # for i in range(len(lis)-1):
 86 #     min_data = i
 87 #     for j in range(i+1,len(lis)):
 88 #         if lis[j]<lis[min_data]:
 89 #             min_data=j
 90 #         lis[i],lis[min_data]=lis[min_data],lis[i]
 91 # print(lis)
 92 
 93 #插入排序,有序区和无序区,第一个元素为有序区,其他元素为无序区,从无序区调一个元素到有序区,进行插入排序,直到无序区没有数据
 94 #冒泡排序+插入排序,不是正宗的插入排序
 95 # lis=[11,3,9,8,9,2,4,5,7,8,7,4]
 96 # for i in range(len(lis)-1):
 97 #     for j in range(i+1,len(lis)):
 98 #         for k in range(j):
 99 #             if lis[k]>lis[j]:
100 #                 lis[k], lis[j] = lis[j], lis[k]
101 # print(lis)
102 
103 #自己捣鼓的插入排序
104 # def insert_sort(lis):
105 #     for i in  range(len(lis)-1):
106 #         tmp=lis[i+1]
107 #         while i>=0 and lis[i] > tmp:
108 #             lis[i+1]=lis[i]
109 #             i-=1
110 #         lis[i+1]=tmp
111 #     return lis
112 # print(insert_sort(lis))
113 
114 #使用list的pop属性的插入排序
115 # def insert_sort(lis):
116 #     for i in  range(len(lis)-1):
117 #         tmp=lis.pop(i+1)
118 #         while i>=0 and lis[i] > tmp:
119 #             i-=1
120 #         lis.insert(i+1,tmp)
121 #     return lis
122 # print(insert_sort(lis))
123 
124 # lis=[6,11,3,9,8,9,2,4,5,7,8,7,4]
125 #使用二分叉的插入排序
126 # def insert_sort(lis):
127 #     for i in  range(len(lis)-1):
128 #         tmp=lis.pop(i+1)
129 #         low=0
130 #         high=i
131 #         while low<=high:
132 #             mid=(low+high)//2
133 #             if lis[mid]>=tmp:
134 #                 high=mid-1
135 #             elif lis[mid]<=tmp:
136 #                 low=mid+1
137 #         if lis[mid] >= tmp:
138 #             lis.insert(mid, tmp)
139 #         else:
140 #             lis.insert(mid+1, tmp)
141 #     return lis
142 # print(insert_sort(lis))
143 
144 # 正宗的插入排序:依次取出无序区的元素和有序区的元素对比(从末尾比对到最前面),如过元素大于有序区末尾元素,那么在有序区后面添加取出的元素;
145 # 否则添加元素为之前的末尾元素,取出的元素继续与前面的元素比,一直执行下去。
146 # lis=[11,3,9,8,9,2,4,5,7,8,7,4]
147 # for i in range(1,len(lis)):
148 #     tmp=lis[i]
149 #     j=i-1
150 #     while j >=0 and lis[j]>tmp:
151 #         lis[j+1]=lis[j]
152 #         j-=1
153 #     lis[j+1]=tmp
154 # print(lis)
155 
156 
157 #快速排序
158 #1.归位,先把第一个元素拿出来,用一个临时变量tmp存储,接下来需要把大的放右边,小的放左边
159 #2.lit[-1]和tmp比较,如果lit[-1]>tmp,继续比较lit[-2]和tmp,如果lit[-2]<=tmp,那么需要把lit[-2]放到之前tmp的位置0,即lis[0]=lit[-2]
160 #3.上面把lis[-2]这个提前面来了,那么,lis[-2]这个位置空粗来了,需要找一个比tmp大的数填进去
161 #4.lis[0]后面就开始比较lis[1]和ltmp了,如果lit[1]<tmp,那么lit[1]不用动,接着比较lis[2]与tmp,如果lit[2]>tmp,那么把lit[2]放到之前lis[-2]这个位置
162 #5.现在lis[2]这个位置空出来了,那么需要找一个比tmp小的数塞进去,就从lis[-3]开始找,重复234的步骤,一直找下去,直到都比对完成,最后把拿出来的tmp再塞回去
163 #6.塞tmp,当最后只剩下一个位置的时候,那这个位置就是tmp的,这个位置下标是多少呢?6
164 #比如lis=[6,11,3,9,8],那么比对完成的结果是:lis=[3,11,11,9,8]  塞进去的位置就是1
165 #7.上面的过程就是归位,这个步骤完成后,就需要左边的再来一次上述的步骤,右边再来一次上述的步骤,也就是递归,一直递归下去,直到下标重合,也就是左下标等于右下标
166 # lis=[6,11,3,9,8,9,2,4,5,7,8,7,4]
167 # def quick_sort(lis,left,right):
168 #     if left<right:
169 #         mid=partition(lis,left,right)
170 #         quick_sort(lis, left, mid-1)
171 #         quick_sort(lis, mid+1, right)
172 # def partition(lis,left,right):
173 #     tmp=lis[left]
174 #     while left<right:
175 #         while left<right and lis[right]>=tmp:
176 #             right-=1
177 #         lis[left]=lis[right]
178 #         while left<right and lis[left]<=tmp:
179 #             left+=1
180 #         lis[right]=lis[left]
181 #     lis[left]=tmp
182 #     return left
183 # quick_sort(lis,0,len(lis)-1)
184 # print(lis)
185 
186 #堆排序
187 # lis=[6,11,3,9,8,9,2,4,5,7,8,7,4]
188 # def shift(lis,low,high):
189 #     i=low
190 #     j=2*i+1
191 #     tmp=lis[low]
192 #     while j<=high:
193 #         if j<high and lis[j]<lis[j+1]:
194 #             j+=1
195 #         if tmp<lis[j]:
196 #             lis[i] = lis[j]
197 #             i=j
198 #             j=2*i+1
199 #         else:
200 #             break
201 #     lis[i]=tmp
202 # def heap_sort(lis):
203 #     n=len(lis)
204 #     for i in range(n//2-1,-1,-1):
205 #         shift(lis,i,n-1)
206 #     for i in range(n-1,-1,-1):
207 #         lis[i],lis[0]=lis[0],lis[i]
208 #         shift(lis,0,i-1)
209 # heap_sort(lis)
210 # print(lis)
211 
212 
213 #归并排序
214 # # lis=[6,11,3,9,8,9,2,4,5,7,8,7,4]
215 # lis=[7, 7, 8, 8, 9, 9, 11,2, 3, 4, 4, 5, 6]
216 #一次归并
217 # def merge(lis,left,right):
218 #     lis2 = []
219 #     i=right
220 #     j=len(lis)
221 #     while left<i and right<j:
222 #         if left<i and right<j:
223 #             if lis[left] <= lis[right]:
224 #                 lis2.append(lis[left])
225 #                 left += 1
226 #             elif lis[left] >= lis[right]:
227 #                 lis2.append(lis[right])
228 #                 right += 1
229 #         if left==i:
230 #             for k in range(right,j):
231 #                 lis2.append(lis[k])
232 #         if right == j:
233 #             for k in range(left,i):
234 #                 lis2.append(lis[k])
235 #     print(lis2)
236 
237 # lis=[6,11,3,9,8,9,2,4,5,7,8,7,4]
238 # lis=[7, 7, 8, 8, 9, 9, 11,2, 3, 4, 4, 5, 6]
239 # #一次归并优化
240 # def merge(lis,low,mid,high):
241 #     lis2=[]
242 #     i=low
243 #     j=mid+1
244 #     while i<=mid and j<=high:
245 #         if lis[i]<=lis[j]:
246 #             lis2.append(lis[i])
247 #             i+=1
248 #         else:
249 #             lis2.append(lis[j])
250 #             j+=1
251 #     while i<=mid:
252 #         lis2.append(lis[i])
253 #         i += 1
254 #     while j<=high:
255 #         lis2.append(lis[i])
256 #         j += 1
257 #     print(lis2)
258 # # merge(lis,0,6,len(lis)-1)
259 # def merge_sort(lis,low,high):
260 #     if low<high:
261 #         mid=(low+high)//2
262 #         merge_sort(lis,low,mid)
263 #         merge_sort(lis,mid+1,high)
264 #         merge(lis,low,mid,high)
265 
266 #计数排序,1000万人按年龄排序
267 # import random
268 # lis=[]
269 # for i in range(10000):
270 #     lis.append(random.randint(0,100))
271 # def count(lis,max_num):
272 #     count_lis=[0 for i in range(max_num+1)]
273 #     for i in range(max_num+1):
274 #         count_lis[i]+=lis.count(i)
275 #     j=0
276 #     for num,m in enumerate(count_lis) :
277 #         for i in range(m):
278 #             lis[j]=num
279 #             j+=1
280 # print(len(lis))
281 # print(lis)
282 # count(lis,100)
283 # print(len(lis))
284 # print(lis)
285 
286 import random
287 lis=[]
288 for i in range(100):
289     lis.append(random.randint(0,100))
290 #N个数求前K大的数,自己捣鼓
291 # def topk(lis,k):
292 #     tmp_lis=lis[0:k+1]
293 #     for i in range(1,len(tmp_lis)):
294 #         j=i-1
295 #         while j>=0 and tmp_lis[j+1]>tmp_lis[j]:
296 #             tmp_lis[j+1],tmp_lis[j]=tmp_lis[j],tmp_lis[j+1]
297 #             j-=1
298 #     for i in range(k+1,len(lis)):
299 #         tmp_lis[k]=lis[i]
300 #         j=k-1
301 #         while j>=0 and tmp_lis[j+1]>tmp_lis[j]:
302 #             tmp_lis[j+1],tmp_lis[j]=tmp_lis[j],tmp_lis[j+1]
303 #             j-=1
304 #     print(tmp_lis)
305 # topk(lis,10)
306 
307 #优化
308 # def topk(lis,k):
309 #     heap=lis[0:k]
310 #     for i in range(k//2-1,-1,-1):
311 #         sift
312 
313 # lis=[1,2,5,4,6]
314 # sm=3
315 # def get_num(lis,sm):
316 #     for i in range(len(lis)):
317 #         for j in (i+1,len(lis)):
318 #             if lis[i]+lis[j]==sm:
319 #                 return(i,j)
320 # print(get_num(lis,sm))
321 
322 # team1=['a','b','c']
323 # team2=['x','y','z']
324 # #a不和x,b不和y、z
325 # for i in team1:
326 #     for j in team2:
327 #         if i=='a' and j=='x':
328 #             continue
329 #         elif i=='b' and (j=='y' or j=='z'):
330 #             continue
331 #         print('%s对战%s'%(i,j))

 

posted @ 2019-12-11 09:26  毛斯钢  阅读(193)  评论(0编辑  收藏  举报