• Python 快速排序


    def quicksort(array):
        if len(array)<2:
            return array
        else:
            pivot = array[0]     # 基准点
            small = [i for i in array[1:] if i <= pivot] # 找到小于基准点的部分
            big = [i for i in array[1:] if i > pivot]     # 大于基准点的部分
            return quicksort(small) + [pivot] + quicksort(big) # 合并
    print(quicksort([10,2,6,12,39,10]))

    1. 快速排序

    对于一个待排序的列表,先选一个基准值,让列表中的元素和这个基准值对比,分成两部分:大于这个值的部分、小于这个值的部分;再分别对这两个部分进行找基准值的操作,最后将这个最小部分、基准值、最大部分合并。

    2. 冒泡排序

    冒泡排序的逻辑很简单:对n个数,每次只比较2个数。1和2比较,谁大谁放在后面,2再和3比较,3和4比较...n-1和n比较,这样到最后,最大的数就被放在了最后一个位置。继续循环,1和2,2和3,n-2和n-1(第一次循环最大数已经放在最后一个位置了,不用再比了)。。。

    # 冒泡排序
    
    def bubble(array):
        n = len(array)
        for i in range(n): # 第一层循环,只是为了循环次数,每循环一次,只能将一个最大数放到后面
            for j in range(n-i-1): # 第二层循环,查找最大数,一直将它挪放到后面
                if array[j] > array[j+1]:
                    array[j],array[j+1] = array[j+1],array[j]
        return array
    
    print(bubble([5,2,3,9,1,0]))

    3. 选择排序

    选择排序和冒泡有些像,冒泡是每次挪动一个数,选择是每次比较一个数。

    对于n个数,

    loop1:将第一个数和后面全部的数比较,找到最小数,放到第一位

    loop2:将第二个数和后面所有的数比较,找到最小数,放到第二位

    ....

    所以,选择排序每次只挪动一次数,而不像冒泡每两个数比较一次就挪动一次。 

    def selectSort(arr):
        for i in range(len(arr)):
            min = i # 记录最小值的索引
            for j in range(i+1,len(arr)):
                if arr[j] < arr[min]:
                    min = j
            if i != min: # 如果当前索引的值不是最小值
                arr[i],arr[min] = arr[min],arr[i]
        return arr
    arr = selectSort([1,5,2,8,9,3])
  • 相关阅读:
    什么是基于注解的容器配置?
    一个线程运行时发生异常会怎样?
    Java 中你怎样唤醒一个阻塞的线程?
    为什么 wait, notify 和 notifyAll 这些方法不在 thread 类里面?
    Java 中 notify 和 notifyAll 有什么区别?
    在 Spring MVC 应用程序中使用 WebMvcTest 注释有什么用处?
    java 中有几种方法可以实现一个线程?
    什么是AOP?
    什么是竞争条件?你怎样发现和解决竞争?
    Mybatis 是如何进行分页的?分页插件的原理是什么?
  • 原文地址:https://www.cnblogs.com/wztshine/p/13031437.html
Copyright © 2020-2023  润新知