zoukankan      html  css  js  c++  java
  • 七种排序算法

    1. 选择排序

    def selectSort(nums):
        size = len(nums)
        for i in range(0, size - 1):
            minIndex = i
            minValue = nums[i]
            for j in range(i + 1, size):
                if nums[j] < minValue:
                    minValue = nums[j]
                    minIndex = j
            nums[i], nums[minIndex] = nums[minIndex], nums[i]

    2. 插入排序

    def insertSort(nums):
        size = len(nums)
        for i in range(1, size):
            for j in range(i, 0, -1):
                if nums[j] >= nums[j - 1]:
                    break
                nums[j], nums[j - 1] = nums[j - 1], nums[j]

    3.冒泡排序

    def bubbleSort(nums):
        size = len(nums)
        for i in range(0, size):
            exchange = False
            for j in range(1, size - i):
                if nums[j - 1] > nums[j]:
                    nums[j], nums[j - 1] = nums[j - 1], nums[j]
                    exchange = True
            if not exchange:
                break

    4.快速排序

    def quickSort(nums, start, end):
        if start >= end:
            return
    
        pivot = nums[start]
        i = start + 1
        j = end
        while i < j:
            while i < j and nums[i] < pivot:
                i += 1
            while i < j and nums[j] >= pivot:
                j -= 1
            if i < j:
                nums[i], nums[j] = nums[j], nums[i]
        pivotIndex = i
        if nums[pivotIndex] < pivot:
            nums[start], nums[pivotIndex] = nums[pivotIndex], nums[start]
        else:
            if pivotIndex - start > 1:
                pivotIndex -= 1
                nums[start], nums[pivotIndex] = nums[pivotIndex], nums[start]
        quickSort(nums, start, pivotIndex - 1)
        quickSort(nums, pivotIndex, end)

    nums = [3, 4, 5, 6, 1, 3]
    quickSort(nums, 0, len(nums) - 1)

    5. 希尔排序

    def shellSort(nums):
        size = len(nums)
        step = size // 2
        while step > 0:
            for i in range(0, step):
                for j in range(i + step, size, step):
                    while j - step >= 0 and nums[j] < nums[j - step]:
                        nums[j], nums[j - step] = nums[j - step], nums[j]
                        j -= step
    
            step = step // 2

    6.归并排序

    def mergeSort(nums, start, end):
        if start >= end:
            return
        if end == start + 1:
            if nums[end] < nums[start]:
                nums[start], nums[end] = nums[end], nums[start]
            return
    
        mid = (start + end) // 2
        mergeSort(nums, start, mid)
        mergeSort(nums, mid + 1, end)
    
        i = start
        j = mid + 1
        midSortNums = []
        while i <= mid and j <= end:
            if nums[i] < nums[j]:
                midSortNums.append(nums[i])
                i += 1
            else:
                midSortNums.append(nums[j])
                j += 1
    
        while i <= mid:
            midSortNums.append(nums[i])
            i += 1
    
        while j <= end:
            midSortNums.append(nums[j])
            j += 1
    
        nums[start:end + 1] = midSortNums
        del midSortNums
    
    
    nums = [3, 4, 5, 6, 1, 3]
    mergeSort(nums, 0, len(nums) - 1)

    7.堆排序

    def maxHeapFixDown(nums, index, size):
        left = 2 * index + 1
        right = left + 1
        while left < size:
            change_index = -1
            if nums[index] < nums[left]:
                change_index = left
            if right < size and nums[right] > nums[left] and nums[right] > nums[index]:
                change_index = right
    
            if change_index == -1:
                break
            nums[index], nums[change_index] = nums[change_index], nums[index]
    
            index = change_index
            left = 2 * index + 1
            right = left + 1
    
    
    def createMaxHeap(nums):
        size = len(nums)
        for i in range(size // 2, -1, -1):
            maxHeapFixDown(nums, i, size)
    
    
    def heapSort(nums):
        createMaxHeap(nums)
        size = len(nums)
        for i in range(0, size - 1):
            nums[0], nums[size - i - 1] = nums[size - i - 1], nums[0]
            maxHeapFixDown(nums, 0, size - i - 1)
  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/ordili/p/10146269.html
Copyright © 2011-2022 走看看