add python code
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
"""
|
||||
全排列生成 — 递归交换法
|
||||
生成 n 个元素的所有排列 (n!)
|
||||
"""
|
||||
|
||||
def permute(arr, start, end):
|
||||
"""递归生成全排列"""
|
||||
if start == end:
|
||||
print("".join(map(str, arr)))
|
||||
else:
|
||||
for i in range(start, end + 1):
|
||||
arr[start], arr[i] = arr[i], arr[start]
|
||||
permute(arr, start + 1, end)
|
||||
arr[start], arr[i] = arr[i], arr[start] # 回溯
|
||||
|
||||
def permute_unique(arr, start, end):
|
||||
"""生成去重全排列"""
|
||||
if start == end:
|
||||
print("".join(map(str, arr)))
|
||||
else:
|
||||
seen = set()
|
||||
for i in range(start, end + 1):
|
||||
if arr[i] not in seen:
|
||||
seen.add(arr[i])
|
||||
arr[start], arr[i] = arr[i], arr[start]
|
||||
permute_unique(arr, start + 1, end)
|
||||
arr[start], arr[i] = arr[i], arr[start]
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("全排列 [1,2,3]:")
|
||||
permute([1, 2, 3], 0, 2)
|
||||
|
||||
print("\n去重全排列 [1,1,2]:")
|
||||
permute_unique([1, 1, 2], 0, 2)
|
||||
@@ -0,0 +1,25 @@
|
||||
"""
|
||||
递归示例 — 递归打印整数各位数字
|
||||
"""
|
||||
|
||||
def print_digits(n):
|
||||
"""递归按位打印整数(高位到低位)"""
|
||||
if n < 10:
|
||||
print(n, end=" ")
|
||||
else:
|
||||
print_digits(n // 10)
|
||||
print(n % 10, end=" ")
|
||||
|
||||
def print_triangle(n, current=1):
|
||||
"""递归打印星号三角形"""
|
||||
if current > n:
|
||||
return
|
||||
print("*" * current)
|
||||
print_triangle(n, current + 1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
n = 12345
|
||||
print(f"递归打印 {n} 的各位数字:")
|
||||
print_digits(n)
|
||||
print("\n\n递归三角形 (n=5):")
|
||||
print_triangle(5)
|
||||
@@ -0,0 +1,43 @@
|
||||
"""
|
||||
二分查找 — 在有序数组中查找目标值
|
||||
时间复杂度 O(log n)
|
||||
"""
|
||||
|
||||
def binary_search_recursive(arr, target, left, right):
|
||||
"""递归版二分查找"""
|
||||
if left > right:
|
||||
return -1
|
||||
|
||||
mid = left + (right - left) // 2
|
||||
|
||||
if arr[mid] == target:
|
||||
return mid
|
||||
elif arr[mid] > target:
|
||||
return binary_search_recursive(arr, target, left, mid - 1)
|
||||
else:
|
||||
return binary_search_recursive(arr, target, mid + 1, right)
|
||||
|
||||
def binary_search_iterative(arr, target):
|
||||
"""迭代版二分查找"""
|
||||
left, right = 0, len(arr) - 1
|
||||
|
||||
while left <= right:
|
||||
mid = left + (right - left) // 2
|
||||
if arr[mid] == target:
|
||||
return mid
|
||||
elif arr[mid] > target:
|
||||
right = mid - 1
|
||||
else:
|
||||
left = mid + 1
|
||||
|
||||
return -1
|
||||
|
||||
if __name__ == "__main__":
|
||||
arr = [1, 3, 5, 7, 9, 11, 13, 15]
|
||||
target = 7
|
||||
|
||||
idx1 = binary_search_recursive(arr, target, 0, len(arr) - 1)
|
||||
idx2 = binary_search_iterative(arr, target)
|
||||
|
||||
print(f"数组: {arr}")
|
||||
print(f"查找 {target}: 递归版结果索引={idx1}, 迭代版结果索引={idx2}")
|
||||
@@ -0,0 +1,50 @@
|
||||
"""
|
||||
归并排序 — 分治法的经典应用
|
||||
时间复杂度 O(n log n),空间复杂度 O(n)
|
||||
"""
|
||||
|
||||
def merge(arr, left, mid, right):
|
||||
"""合并两个有序子数组"""
|
||||
# 创建临时数组
|
||||
L = arr[left:mid + 1]
|
||||
R = arr[mid + 1:right + 1]
|
||||
|
||||
i = j = 0
|
||||
k = left
|
||||
|
||||
# 合并两个有序数组
|
||||
while i < len(L) and j < len(R):
|
||||
if L[i] <= R[j]:
|
||||
arr[k] = L[i]
|
||||
i += 1
|
||||
else:
|
||||
arr[k] = R[j]
|
||||
j += 1
|
||||
k += 1
|
||||
|
||||
# 复制剩余元素
|
||||
while i < len(L):
|
||||
arr[k] = L[i]
|
||||
i += 1
|
||||
k += 1
|
||||
while j < len(R):
|
||||
arr[k] = R[j]
|
||||
j += 1
|
||||
k += 1
|
||||
|
||||
def merge_sort(arr, left, right):
|
||||
"""归并排序主函数"""
|
||||
if left < right:
|
||||
mid = (left + right) // 2
|
||||
merge_sort(arr, left, mid)
|
||||
merge_sort(arr, mid + 1, right)
|
||||
merge(arr, left, mid, right)
|
||||
|
||||
def sort(arr):
|
||||
merge_sort(arr, 0, len(arr) - 1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
data = [38, 27, 43, 3, 9, 82, 10]
|
||||
print("排序前:", data)
|
||||
sort(data)
|
||||
print("排序后:", data)
|
||||
@@ -0,0 +1,33 @@
|
||||
"""
|
||||
快速排序 — 分治策略
|
||||
平均时间复杂度 O(n log n),最坏 O(n²)
|
||||
"""
|
||||
|
||||
def partition(arr, low, high):
|
||||
"""划分:选择基准,将小于基准的放左边,大于的放右边"""
|
||||
pivot = arr[high] # 选最后一个元素作为基准
|
||||
i = low - 1
|
||||
|
||||
for j in range(low, high):
|
||||
if arr[j] <= pivot:
|
||||
i += 1
|
||||
arr[i], arr[j] = arr[j], arr[i]
|
||||
|
||||
arr[i + 1], arr[high] = arr[high], arr[i + 1]
|
||||
return i + 1
|
||||
|
||||
def quick_sort(arr, low, high):
|
||||
"""快速排序递归实现"""
|
||||
if low < high:
|
||||
pi = partition(arr, low, high)
|
||||
quick_sort(arr, low, pi - 1)
|
||||
quick_sort(arr, pi + 1, high)
|
||||
|
||||
def sort(arr):
|
||||
quick_sort(arr, 0, len(arr) - 1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
data = [10, 7, 8, 9, 1, 5]
|
||||
print("排序前:", data)
|
||||
sort(data)
|
||||
print("排序后:", data)
|
||||
Reference in New Issue
Block a user