用Python实现冒泡排序、选择排序、希尔排序、线性查找、贪婪算法

冒泡排序(Bubble Sort)

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        # 创建一个标志,用于检查是否发生了交换
        swapped = False
        for j in range(0, n-i-1):
            # 遍历数组,从0到n-i-1,最后i个元素已经是排序好的
            if arr[j] > arr[j+1]:
                # 如果当前元素大于下一个元素,则交换它们
                arr[j], arr[j+1] = arr[j+1], arr[j]
                swapped = True
        # 如果在这一轮中没有发生交换,说明数组已经排序好了
        if not swapped:
            break
    return arr

# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", arr)
bubble_sort(arr)
print("冒泡排序后的数组:", arr)

选择排序(Selection Sort)

def selection_sort(arr):
    for i in range(len(arr)):
        # 找到未排序部分中的最小元素
        min_idx = i
        for j in range(i+1, len(arr)):
            if arr[j] < arr[min_idx]:
                min_idx = j
        # 将找到的最小元素与未排序部分的第一个元素交换
        arr[i], arr[min_idx] = arr[min_idx], arr[i]
    return arr

# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", arr)
selection_sort(arr)
print("选择排序后的数组:", arr)

希尔排序(Shell Sort)

def shell_sort(arr):
    n = len(arr)
    gap = n // 2

    # 开始希尔排序
    while gap > 0:
        for i in range(gap, n):
            temp = arr[i]
            j = i
            # 将元素插入到已排序的间隔序列中
            while j >= gap and arr[j-gap] > temp:
                arr[j] = arr[j-gap]
                j -= gap
            arr[j] = temp
        gap //= 2
    return arr

# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
print("原始数组:", arr)
shell_sort(arr)
print("希尔排序后的数组:", arr)

线性查找(Linear Search)

下滑查看解决方法

线性查找是一种简单的查找算法,它从列表的一端开始,逐个检查每个元素,直到找到目标元素或遍历完整个列表。

def linear_search(arr, target):
    for i in range(len(arr)):
        if arr[i] == target:
            return i  # 返回目标元素的索引
    return -1  # 如果未找到目标元素,则返回-1

# 示例
arr = [1, 3, 5, 7, 9]
target = 5
result = linear_search(arr, target)
if result != -1:
    print(f"元素 {target} 在数组中的索引为 {result}")
else:
    print(f"元素 {target} 不在数组中")

贪婪算法(Greedy Algorithm)示例:找零钱问题

贪婪算法通常用于在每一步选择中都采取当前状态下最好或最优的选择,从而希望最终能够得到全局最优解。这里我们以找零钱问题为例,假设有面值为1、2、5的硬币,我们要用这些硬币来凑出给定金额的最少硬币数。

def greedy_change(amount, coins):
    coins.sort(reverse=True)  # 将硬币面值从大到小排序
    change = []
    for coin in coins:
        while amount >= coin:
            change.append(coin)
            amount -= coin
    return len(change)

# 示例
amount = 11
coins = [1, 2, 5]
print(f"凑出 {amount} 元所需的最少硬币数为:{greedy_change(amount, coins)}")

在上面的示例中,首先对面值列表进行降序排序,然后从大到小依次使用硬币来凑出金额。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值