插入排序 定义、实例详解、与冒泡排序和选择排序的对比,场景举例,以及实战解析

本文详细介绍了插入排序的定义、工作原理以及与冒泡排序和选择排序的对比。通过实例和NBA球员得分排序场景解释了插入排序的操作过程。虽然在大数据集下效率较低,但适合小规模和部分有序的数据,例如在电子商务平台对小量商品按销量排序的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义:插入排序(Insertion Sort)是一种简单的排序算法,它的工作原理类似于人们手中对扑克牌进行排序的方式。它的主要思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序描述

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果已排序的元素大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2-5

实例详解

假设有一个数字序列:5 3 8 4 2

插入排序过程

  1. 第1次迭代:3 5 8 4 2(将3插入5前面)
  2. 第2次迭代:3 5 8 4 2(未变化,8已在正确位置)
  3. 第3次迭代:3 4 5 8 2(将4插入5前面)
  4. 第4次迭代:2 3 4 5 8(将2插入3前面)

排序后的序列:2 3 4 5 8

排序算法对比

  1. 冒泡排序:重复地比较相邻的两个元素,如果他们的位置错误就交换。每次遍历都使当前最大值冒泡至正确位置。
  2. 选择排序:每次遍历未排序数据,找到最小值并放到排序序列的末尾。

冒泡排序和选择排序与插入排序的区别在于他们不是将元素插入到合适位置,而是不断交换或选择最小值来排序。

NBA场景举例

假设确定球员的顺序是按照平均得分来排序。插入排序可以被用于分析和排列球员的得分。

将球员的得分视为元素,并使用插入排序方法对他们进行排序。将每个球员按照得分插入到已经排序好的球员列表中,最后得到顺序正确的名单。

实战解析

插入排序在最好情况下的输入数据本身就是已排序状态,此时时间复杂度为 O(n)。但在最坏情况下时间复杂度为 O(n^2)。对于越接近已排序的数据集,插入排序的性能越好。在实际应用中,插入排序适合于小数据集和部分有序的数据集,但对于大型数据集,更复杂的排序算法会更为高效,例如快速排序、归并排序等。

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

arr = [5, 3, 8, 4, 2]
insertion_sort(arr)
print("Sorted array:", arr)

在实际项目中,插入排序可能会被应用于小规模的排序场景。假设我们正在开发一个电子商务平台,需要根据商品的销量进行排序以便用户能更方便地找到热门商品。如果销售商品较少且新商品持续添加,插入排序在这里是个合适的选择。

实际项目应用示例代码

class Product:
    def __init__(self, name, sales):
        self.name = name
        self.sales = sales

    def __repr__(self):
        return f"{self.name}: {self.sales}"


def sort_products_by_sales(products):
    for i in range(1, len(products)):
        key_product = products[i]
        j = i - 1

        while j >= 0 and products[j].sales < key_product.sales:
            products[j + 1] = products[j]
            j -= 1
        products[j + 1] = key_product


products = [
    Product("Product A", 100),
    Product("Product B", 500),
    Product("Product C", 300),
    Product("Product D", 150),
]

sort_products_by_sales(products)
print("Sorted products by sales:", products)

以上示例展示了如何在一个简单的电子商务场景中使用插入排序对商品按销量排序。在这个例子中,我们定义了一个名为 Product 的类,包含商品名称(name)和销量(sales)属性。我们对 sort_products_by_sales 函数进行了修改,以适应此自定义类型。最后根据商品销量对商品列表进行插入排序,从而让用户能更方便地找到热门商品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安洪旭真好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值