用python实现冒泡排序和选择排序(Python经典编程案例)

liftword22小时前技术文章5


1.冒泡排序:

def bubble_sort(list):
    for i in range(0, len(list)):
        is_sorted = True
        for j in range(0, len(list) - i - 1):
            if list[j] > list[j + 1]:
                list[j], list[j + 1] = list[j + 1], list[j]
                is_sorted = False
        if is_sorted:
            return


list1 = [97, 3, 6, 1, 8, 5, -20, 100, 50, 200, -32, 123]
bubble_sort(list1)
print(list1)

执行结果如下图:


2.选择排序:

def choose_sort(list):
    list_len = len(list)
    for i in range(0, list_len):
        for j in range(i + 1, list_len):
            if list[i] > list[j]:
                list[i], list[j] = list[j], list[i]
                

list1 = [3, 6, 1, 8, 5, -20, 100, 50, 200]
choose_sort(list1)
print(list1)

执行结果如下图:

3.选择排序、冒泡排序、插入排序、快速排序:

# -*- encoding: utf-8 -*-
import random


# O(n^2)
def selection_sort(lyst):
    """选择排序"""
    i = 0
    while i < len(lyst) - 1:
        min_index = i
        j = i + 1
        while j < len(lyst):
            if lyst[j] < lyst[min_index]:
                min_index = j
            j += 1
        if i != min_index:
            lyst[i], lyst[min_index] = lyst[min_index], lyst[i]
        i += 1


# O(n^2)
def bubble_sort(lyst):
    """冒泡排序"""
    # 外层循环len(lyst) - 1, j最大能取到倒数第二个值, j+1取到最后一个
    for i in range(1, len(lyst)):
        for j in range(0, len(lyst) - 1):
            if lyst[j] > lyst[j + 1]:
                lyst[j], lyst[j + 1] = lyst[j + 1], lyst[j]


# O(n^2)
def insertion_sort(lyst):
    """插入排序"""
    # i=1, 表示假定 lyst[0] 为有序数据, 下一个为无序数据
    for i in range(1, len(lyst)):
        item = lyst[i]
        j = i - 1
        while j >= 0:
            # 如果待排数据小于lyst[j], 就往后覆盖赋值
            if item < lyst[j]:
                lyst[j + 1] = lyst[j]
                j -= 1
            # 因为lyst[j] 是当前有序数值中最大的数, 如果比它还大就直接跳出
            else:
                break
        # j 多减了1
        lyst[j + 1] = item


# O(nlogn)
# 两种快速排序代码
def quick_sort(lyst, left, right):
    """快速排序"""
    middle = (left + right) // 2
    # 基准点
    pivot = lyst[middle]
    if left < right:
        # 边界
        boundary = left
        # 将基准点与最后一个点交换
        lyst[middle], lyst[right] = lyst[right], lyst[middle]
        # 遍历边界右边, 是否小于基准点
        for index in range(left, right):
            if lyst[index] < pivot:
                lyst[boundary], lyst[index] = lyst[index], lyst[boundary]
                boundary += 1
        lyst[boundary], lyst[right] = lyst[right], lyst[boundary]
        # 左右子列表
        quick_sort(lyst, left, boundary - 1)
        quick_sort(lyst, boundary + 1, right)


def quick_sort2(lyst, left, right):
    """快速排序的另一种实现"""
    if left >= right:
        return None
    # 基准点
    pivot = lyst[left]
    i, j = left, right
    while i < j:
        # 右分区向左
        while i < j and lyst[j] > pivot:
            j -= 1
        if i < j:  # 交换
            lyst[i], lyst[j] = lyst[j], lyst[i]
            i += 1
        # 左分区向右
        while i < j and lyst[i] < pivot:
            i += 1
        if i < j:  # 交换
            lyst[i], lyst[j] = lyst[j], lyst[i]
            j -= 1
    lyst[i] = pivot
    quick_sort2(lyst, left, i - 1)
    quick_sort2(lyst, i + 1, right)


def get_lyst(lyst):
    lyst.clear()
    for i in range(8):
        lyst.append(random.randint(1, 8))


def main():
    lyst = []
    print("selection_sort:")
    get_lyst(lyst)
    print(lyst)
    selection_sort(lyst)
    print(lyst)

    print("\nbubble_sort:")
    get_lyst(lyst)
    print(lyst)
    bubble_sort(lyst)
    print(lyst)

    print("\ninsertion_sort:")
    get_lyst(lyst)
    print(lyst)
    insertion_sort(lyst)
    print(lyst)

    print("\nquick_sort:")
    get_lyst(lyst)
    print(lyst)
    quick_sort(lyst, 0, len(lyst) - 1)
    print(lyst)

    print("\nquick_sort2:")
    get_lyst(lyst)
    print(lyst)
    quick_sort(lyst, 0, len(lyst) - 1)
    print(lyst)


if __name__ == '__main__':
    main()

相关文章

Python数据可视化工具画图(八)(气泡图)

概述在《Python数据可视化工具画图(七)(热力图)》中讲述了如何通过python画热力图,本文讲述如何通过python画气泡图。matplotlib安装方法:pip install matplot...

数据可视化:探索气泡图(bubble charts)的力量

气泡图(bubble charts),也称为泡泡图,是展示数据的最引人注目的方式之一。它展示了前两个信息部分之间的关系。此外,它还突出显示了另一个重要部分,这个部分不总是直接依赖于前两个部分。当试图检...

探索Plotly:Python中的强大交互式图表库

Python的开源图形库Plotly (一)plotly 是一个交互式、开源、基于浏览器的 Python 图形库。plotly 图形库可制作交互式、出版质量的图形。包括制作线图、散点图、面积图、条形图...

如何用Python实现冒泡排序算法

一、冒泡排序的原理简介冒泡排序(Bubble Sort)是一种简单的排序算法,其核心思想是通过不断比较相邻元素并交换位置,将较大的元素逐渐“浮”到数组的末尾,就像气泡上浮一样。它的主要特点:时间复杂度...

Python实现冒泡排序

''' 冒泡排序原理:比较列表中相邻的两个元素大小,如果第2个元素比第1个元素大,就交换它俩的位置,从列表的开始到结尾, 依次对每一组相邻的2个元素都进行比较,这样最大的元素就...

一文解读Python嵌套循环实现冒泡排序

冒泡排序是数据结构中的一种经典算法,手工地实现冒泡排序,对于锻炼自己的编程逻辑有很大的帮助,本节就带领大家用循环结构实现冒泡排序算法。冒泡排序算法的实现思想遵循以下几步:1、比较相邻的元素,如果第一个...