文章目录
冒泡排序(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)}")
在上面的示例中,首先对面值列表进行降序排序,然后从大到小依次使用硬币来凑出金额。