zoukankan      html  css  js  c++  java
  • python实现排序算法

    经常忘,每次都要从网上查一下,每次查的都不一样,还是记录一下吧

    1、选择排序

    从一堆数中选择最小的,往前放

    def selectSort(arr):
        for i in range(len(arr)-1):
            key = i
            for j in range(i+1,len(arr)):
                if(arr[j] < arr[key]):
                    key = j
            if key != i:
                arr[key],arr[i] = arr[i],arr[key]
    
        return arr

    2、冒泡排序

    最小的浮起来,放到最后;重点:相邻元素比较,交换

    def bubSort(arr):
        for i in range(len(arr)-1):
            for j in range(1,len(arr)-i):
                if arr[j-1] > arr[j]:
                    arr[j-1],arr[j] = arr[j],arr[j-1]
        return arr

    3、插入排序

    后面的数据按照顺序往前插入

    def insertSort(arr):
        for i in range(1,len(arr)):
            temp = arr[i]
            j = i - 1
            while (j >= 0 and arr[j] > temp):
                arr[j + 1] = arr[j]
                j -= 1
    
            arr[j + 1] = temp
        return arr

    4、快速排序(面试重点)

    找一个基准值,二分,比它大的放后面,比它小的放前面,重复多次,直到不能二分为止

    def partition(arr,left,right):
        pivot = arr[left]
        i = left + 1
        j = right
        while(1):
            while i <= j and arr[i] <= pivot:
                i += 1
            while i <= j and arr[j] >= pivot:
                j -= 1
            if (i >= j):
                break
            arr[i],arr[j] = arr[j],arr[i]
        arr[left] = arr[j]
        arr[j] = pivot
        return j
    
    def quickSort(arr,left,right):
        if left < right:
            mid = partition(arr,left,right)
            arr = quickSort(arr,left,mid - 1)
            arr = quickSort(arr,mid + 1,right)
        return arr

    5、归并排序(面试重点)

    先切,切到一个数为一组,再合并,合并过程按大小排序

    def mergeSort(arr):
        if len(arr) < 2:
            return arr
        mid = len(arr) // 2
        left = mergeSort(arr[:mid])
        right = mergeSort(arr[mid:])
        return merge(left,right)
    
    def merge(a,b):
        c = []
        i = j = 0
        while i < len(a) and j < len(b):
            if a[i] < b[j]:
                c.append(a[i])
                i += 1
            else:
                c.append(b[j])
                j += 1
        c.extend(a[i:])
        c.extend(b[j:])
        return c
    
    print(mergeSort(arr))
  • 相关阅读:
    pytorch nn.Parameters vs nn.Module.register_parameter
    pytorch COCO2017 目标检测 (一)DataLoader
    focal loss 两点理解
    pytorch 目标检测 图像预处理
    C++ 使用copy_if获得数组vector掩膜
    pytorch 网络可视化
    SHELL学习笔记二
    SHELL学习笔记一
    Linux命令笔记一
    VLOOKUP返回#N/A结果
  • 原文地址:https://www.cnblogs.com/zrdm/p/12929014.html
Copyright © 2011-2022 走看看