• mergeSort, quickSort, shellSort 的 python 实现



    class Solution():
    def mergeSort(self, nums):
    def mergeSortR(nums):
    if len(nums) <= 1:
    return nums
    mid = len(nums)//2
    leftList = nums[:mid]
    rightList = nums[mid:]
    leftList = mergeSortR(leftList)
    rightList = mergeSortR(rightList)
    i, j = 0, 0
    newList = []
    while i < len(leftList) and j < len(rightList):
    if leftList[i] <= rightList[j]:
    newList.append(leftList[i])
    i += 1
    else:
    newList.append(rightList[j])
    j += 1
    if i == len(leftList):
    newList = newList + rightList[j:]
    else:
    newList = newList + leftList[i:]
    return newList
    return mergeSortR(nums)

    if __name__ == '__main__':
    nums = [54, 26, 93, 17, 77, 31, 44, 55, 20]
    print(Solution().mergeSort(nums))
    #################################################################################
    class Solution():
    def __init__(self, nums):
    self.nums = nums

    def quickSort(self, start, end):
    if start+1 >= end:
    return
    index = self.partition(start, end)
    self.quickSort(start, index - 1)
    self.quickSort(index + 1, end)
    return self.nums

    def partition(self, start, end):
    ## how to write the pivot function!!
    pivot = self.nums[end]
    small_ind = start-1
    for i in range(start, end):
    if self.nums[i] < pivot:
    small_ind += 1
    if small_ind != i:
    self.nums[i], self.nums[small_ind] = self.nums[small_ind], self.nums[i]
    small_ind += 1
    self.nums[end], self.nums[small_ind] = self.nums[small_ind], self.nums[end]
    return small_ind

    if __name__ == '__main__':
    nums = [4, 3, 45, 2, 2, 35, 4]
    print(Solution(nums).quickSort(0, len(nums)-1))
    ###############################################################################################
    class Solution():
    def __init__(self, nums, gaps):
    self.nums = nums
    self.gaps = gaps

    def shell_sort(self):
    # not the best way!!
    for gap in self.gaps:
    for g in range(gap):
    for i in range(g, len(self.nums), gap):
    temp = self.nums[i]
    for j in range(i, g-1, -gap):
    if temp < self.nums[j-gap]:
    self.nums[j] = self.nums[j-gap]
    else:
    break
    self.nums[j] = temp
    return self.nums

    def shell_sort_official(self):
    for gap in self.gaps:
    for i in range(gap, len(self.nums)):
    temp = self.nums[i]
    for j in range(i, gap-1, -gap):
    if self.nums[j-gap] > temp:
    self.nums[j] = self.nums[j-gap]
    else:
    break
    self.nums[j] = temp
    return self.nums
    if __name__ == '__main__':
    nums = [13,14, 94 ,33, 82, 25, 59, 94, 65, 23, 45, 27, 73, 25, 39, 10]
    gaps = [5, 3, 1]
    s = Solution(nums, gaps)
    print(s.shell_sort_official())
  • 相关阅读:
    Java操作Redis的方式
    Redis综述
    KafKa综述
    NuxtJS项目——状态树
    NuxtJS项目——开发工具
    NuxtJS项目——命令和部署
    NuxtJS项目——模块
    NuxtJS项目——插件
    NuxtJS项目——资源文件
    Sampling Matrix
  • 原文地址:https://www.cnblogs.com/wh228/p/9504488.html
Copyright © 2020-2023  润新知