zoukankan      html  css  js  c++  java
  • sort

    1. quickSort

     1 import random
     2 class Solution:
     3     def partition(self,nums,left,right):
     4         idx=random.randint(left,right)      # 闭区间
     5         pivot=nums[idx]
     6 
     7         nums[idx],nums[right]=nums[right],nums[idx]
     8         
     9         pos=left
    10         for i in range(left,right):
    11             if(nums[i]<pivot):
    12                 nums[i],nums[pos]=nums[pos],nums[i]
    13                 pos+=1
    14         
    15         nums[pos],nums[right]=nums[right],nums[pos]
    16         return pos
    17 
    18     def quickSort(self,nums):
    19         if(len(nums)==1):
    20             return nums
    21         left,right=0,len(nums)-1
    22 
    23         return self.quickSort_helper(nums,left,right)
    24 
    25     def quickSort_helper(self,nums,left,right):
    26         if(left<right):
    27             pos=self.partition(nums,left,right)
    28             self.quickSort_helper(nums,left,pos-1)
    29             self.quickSort_helper(nums,pos+1,right)
    30         
    31         return nums
    32 
    33 
    34 nums=[5,2,34,21]
    35 print(Solution().quickSort(nums))

    2. mergeSort

     1 class Solution2:
     2     def merge(self,nums,left,mid,right):
     3         helper=[]
     4         i=left
     5         j=mid+1
     6         while i<=mid and j<=right:
     7             if(nums[i]<nums[j]):
     8                 helper.append(nums[i])
     9                 i+=1
    10             else:
    11                 helper.append(nums[j])
    12                 j+=1
    13         
    14         while i<=mid:
    15             helper.append(nums[i])
    16             i+=1
    17         
    18         while j<=right:
    19             helper.append(nums[j])
    20             j+=1
    21         
    22         for k in range(len(helper)):
    23             nums[k+left]=helper[k]
    24 
    25 
    26     def mergeSort(self,nums):
    27         left,right=0,len(nums)-1
    28         return self.mergeSort_helper(nums,left,right)
    29     
    30     def mergeSort_helper(self,nums,left,right):
    31         if(left<right):
    32             mid=left+((right-left)>>1)
    33             self.mergeSort_helper(nums,left,mid)
    34             self.mergeSort_helper(nums,mid+1,right)
    35             self.merge(nums,left,mid,right)
    36 
    37         return nums
  • 相关阅读:
    通过ifconfig命令分析
    网络协议初探
    商品详情页面属性价格显示其对应价格
    ecshop属性 {$goods.goods_attr|nl2br} 标签的赋值相关
    CI模板中如何引入模板
    jQuery取得/设置select的值
    ecshop如何增加多个产品详细描述的编辑器
    获取span里面的值(特殊情况下 )
    一个页面有相同ID元素的情况分析
    表单辅助函数-form_open()
  • 原文地址:https://www.cnblogs.com/zijidan/p/12548344.html
Copyright © 2011-2022 走看看