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))
  • 相关阅读:
    用Iterator实现遍历集合
    SimpleDateFormat使用详解 <转>
    Java学习之Iterator(迭代器)的一般用法 (转)
    Java:String和Date、Timestamp之间的转换
    关于PreparedStatement.addBatch()方法 (转)
    JavaBean入门及简单的例子
    Tomcat7.0无法启动解决方法[failed to start]
    executeQuery、executeUpdate 和 execute
    jquery中attr和prop的区别
    Jquery的parent和parents(找到某一特定的祖先元素)
  • 原文地址:https://www.cnblogs.com/znyyy/p/12020606.html
Copyright © 2011-2022 走看看