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
  • 相关阅读:
    插入排序
    选择排序
    二分法查找
    pickle模块的使用
    循环和递归求阶乘、递归实现汉诺塔程序、递归实现拆出每个位的数字放在列表中、递归求第五个人的年龄
    app测试和测试基础
    TCP协议中的三次握手和四次挥手及其他
    AcWing 122 糖果传递
    AcWing 121 赶牛入圈 (二分+离散化)
    AcWing 120 防线 (二分)
  • 原文地址:https://www.cnblogs.com/zijidan/p/12548344.html
Copyright © 2011-2022 走看看