美文网首页
python 常见排序算法

python 常见排序算法

作者: dongshangtong | 来源:发表于2019-05-05 16:28 被阅读0次

1.冒泡排序

对数组中每个位置的数据,从后往前推,依次比较相邻的两个数,如果后面的数较小,则交换两者位置,如果一次遍历没有发生任何数据交换,则排序直接完成。

def bubble_sort(li):
    le = len(li)
    for i in range(0, le):
        lee = le - i - 1
        for j in range(0, lee):

            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
       
    print(li)

2.选择排序

对数组中每个位置的数据,从后往前推,依次比较相邻的两个数,如果后面的数较大,则交换两者位置,如果一次遍历没有发生任何数据交换,则排序直接完成。

def select_sort(li):
    # 从第0位开始排序,直到最后一位(最后一位无需再排序)
    for i in range(len(li)-1):
        # 记录当前位置,作为对比的关键元素
        min_loc = i
        # 依次遍历后面的元素
        for j in range(i+1, len(li)):
            # 如果元素比关键元素小,则将关键元素位置指向此位置,再继续遍历
            if li[min_loc] > li[j]:
                min_loc = j

        # 遍历结束后,得到最小元素位置j,如果不是初始位置,则交换2个位置的值
        if i != min_loc:
            li[min_loc], li[i] = li[i], li[min_loc]
    
    print(li)

3.插入排序

从第1位开始,依次将数组分成2部分:前一部分可以视为已经排好序的,后一部分是未排序的,对后一部分的数据依次遍历,插入到前一部分中的合适位置

def insert_sort(li):
    if len(li) == 0:
        return None
    for i in range(len(li)):
        j = i
        # 待排序的数(是未排序部分的第1个数,它的上一位数就是已经排序的部分的最后一位数)
        temp = li[i]
        # 从已排序部分的最后一位开始依次往前推,如果比待排序的数大,则将其位置往后移一位
        while j > 0 and li[j-1] > temp:
            li[j] = li[j-1]
            j -= 1
        # 循环结束后的j即为待排序的数需要插入的位置
        li[j] = temp

4.快速排序

任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,再分别对两边的数据进行快速排序。

def quick_sort(li):
    l = len(li)

    if l == 0:
        return

    quick_sort_code(li, 0, l -1)

    print(li)


def quick_sort_code(li, start, end):
    if start > end:
        # 低位大于高位,排序结束
        return
    low = start
    high = end
    # 取第一个数作为关键数据
    key = li[start]

    while low < high:
        # 从后往前推,直到找到第一个比关键数据小的值
        while li[high] >= key and low < high:
            high -= 1

        # 将这个值与关键数据对调(关键数据处于low位置
        # 对调完关键数据处于high位置
        li[low], li[high] = li[high], li[low]

        while li[low] <= key and low < high:
            low += 1
        # 将这个值与关键数据(关键数据已经处于high位置)对调
        # 对调完关键数据处于low位置
        li[low], li[high] = li[high], li[low]

    # 对关键数据前面的数据进行快速排序
    quick_sort_code(li, start, low-1)

    # 对关键数据后面的数据进行快速排序
    quick_sort_code(li, low + 1, end)

5.二分法查找

def binary_search(li, val):
    low = 0
    high = len(li) - 1
    while low <= high:
        mid = (low + high) // 2
        if li[mid] > val:
            high = mid - 1
        elif li[mid] < val:
            low = mid + 1
        else:
            return None
    else:
        return None

相关文章

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • python 常见排序算法

    1.冒泡排序 对数组中每个位置的数据,从后往前推,依次比较相邻的两个数,如果后面的数较小,则交换两者位置,如果一次...

  • python 常见排序算法

    一、冒泡排序 两两对比,大的向后移位,多次循环 最好的情况,顺序时间复杂度:0(n), 最坏的时间复杂度: o(n...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 排序

    排序是生活中常常会遇到的问题,也是面试中经常会问的算法,本文简单记录了常见的排序算法,使用C++与Python分别...

  • 排序算法详细代码实现

    算法分类 算法时间复杂度 选择排序 插入排序 C++实现 Python实现 冒泡排序 Python实现 归并排序 ...

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

网友评论

      本文标题:python 常见排序算法

      本文链接:https://www.haomeiwen.com/subject/gqdhoqtx.html