zoukankan      html  css  js  c++  java
  • 算法

      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))
  • 相关阅读:
    call()与apply()的作用与区别
    Tomcat8/9的catalina.out中文乱码问题解决
    怎样查看Jenkins的版本
    每日日报2020.8.18
    528. Random Pick with Weight
    875. Koko Eating Bananas
    721. Accounts Merge
    515. Find Largest Value in Each Tree Row
    286. Walls and Gates (Solution 1)
    408. Valid Word Abbreviation
  • 原文地址:https://www.cnblogs.com/znyyy/p/12020606.html
Copyright © 2011-2022 走看看