Python 十大经典算法代码示例
包含:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、二分查找、斐波那契、KMP字符串匹配。 1. 冒泡排序 Bubble Sort 相邻元素比较交换,每轮把最大值“冒泡”到末尾 python
def bubble_sort(arr): n = len(arr) for i in range(n): swapped = False for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swapped = True if not swapped: break return arrtest = [64, 34, 25, 12, 22, 11, 90]print(bubble_sort(test)) 2. 选择排序 Selection Sort 每次选未排序部分最小值,放到已排序末尾 python
def selection_sort(arr): n = len(arr) for i in range(n): min_idx = i for j in range(i + 1, n): if arr[j] < arr[min_idx]: min_idx = j arr[i], arr[min_idx] = arr[min_idx], arr[i] return arrtest = [64, 34, 25, 12, 22, 11, 90]print(selection_sort(test)) 3. 插入排序 Insertion Sort 像整理扑克牌,逐个插入到前面有序序列 python
def insertion_sort(arr): for i in range(1, len(arr)): key = arr[i] j = i - 1 while j >= 0 and key < arr[j]: arr[j + 1] = arr[j] j -= 1 arr[j + 1] = key return arrtest = [64, 34, 25, 12, 22, 11, 90]print(insertion_sort(test)) 4. 希尔排序 Shell Sort 改进插入排序,按间隔分组,逐步缩小间隔 python
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 arrtest = [64, 34, 25, 12, 22, 11, 90]print(shell_sort(test)) 5. 归并排序 Merge Sort 分治思想,拆分→排序子数组→合并 python
def merge(left, right): res = [] i = j = 0 while i < len(left) and j < len(right): if left[i] < right[j]: res.append(left[i]) i += 1 else: res.append(right[j]) j += 1 res.extend(left[i:]) res.extend(right[j:]) return resdef merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left = merge_sort(arr[:mid]) right = merge_sort(arr[mid:]) return merge(left, right)test = [64, 34, 25, 12, 22, 11, 90]print(merge_sort(test)) 6. 快速排序 Quick Sort 选基准值,小放左边,大放右边,递归 python
def quick_sort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] mid = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quick_sort(left) + mid + quick_sort(right)test = [64, 34, 25, 12, 22, 11, 90]print(quick_sort(test)) 7. 堆排序 Heap Sort 构建大顶堆,不断把堆顶最大值放到末尾 python
def heapify(arr, n, i): largest = i l = 2 * i + 1 r = 2 * i + 2 if l < n and arr[l] > arr[largest]: largest = l if r < n and arr[r] > arr[largest]: largest = r if largest != i: arr[i], arr[largest] = arr[largest], arr[i] heapify(arr, n, largest)def heap_sort(arr): n = len(arr) # 构建大顶堆 for i in range(n // 2 - 1, -1, -1): heapify(arr, n, i) # 逐个提取元素 for i in range(n - 1, 0, -1): arr[0], arr[i] = arr[i], arr[0] heapify(arr, i, 0) return arrtest = [64, 34, 25, 12, 22, 11, 90]print(heap_sort(test)) 8. 二分查找 Binary Search(有序数组) python
def binary_search(arr, target): left, right = 0, len(arr)-1 while left <= right: mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: left = mid + 1 else: right = mid - 1 return -1sorted_arr = [11,12,22,25,34,64,90]print(binary_search(sorted_arr,25)) 9. 斐波那契数列(递归+迭代) python
迭代版,效率高def fib(n): a, b = 0, 1 for _ in range(n): a, b = b, a + b return a# 获取前10项print([fib(i) for i in range(10)]) 10. KMP字符串匹配算法 高效模式串查找,避免重复回退指针 python
def get_next(pattern): m = len(pattern) next_arr = [0]*m j = 0 for i in range(1,m): while j>0 and pattern[i] != pattern[j]: j = next_arr[j-1] if pattern[i]==pattern[j]: j +=1 next_arr[i]=j else: next_arr[i]=0 return next_arrdef kmp_search(text, pattern): n, m = len(text), len(pattern) if m == 0: return 0 next_arr = get_next(pattern) j=0 for i in range(n): while j>0 and text[i]!=pattern[j]: j = next_arr[j-1] if text[i]==pattern[j]: j +=1 if j == m: return i - m +1 return -1print(kmp_search(“abcabcabd”,“abcabd”)) 算法时间复杂度简表 算法 最好 最坏 平均 空间 稳定性 冒泡排序 稳定 选择排序 不稳定 插入排序 稳定
更多推荐




所有评论(0)