面试刷题必看!Python中的5大排序算法及其实现代码

有没有人在啊,想请教下,面试刷题必看!Python中的5大排序算法及其实现代码
最新回答
江心薄雾起

2026-08-18 01:51:32

以下是Python中常见的5大排序算法及其实现代码:

  • 冒泡排序:通过多次遍历列表,比较相邻元素并交换顺序错误的元素,直到列表有序。
def bubble_sort(arr): def swap(i, j): arr[i], arr[j] = arr[j], arr[i] n = len(arr) swapped = True x = -1 while swapped: swapped = False x = x + 1 for i in range(1, n-x): if arr[i - 1] > arr[i]: swap(i - 1, i) swapped = True return arr
  • 选择排序:将列表分为已排序和未排序两部分,每次从未排序部分选择最小元素放到已排序部分的末尾。
def selection_sort(arr): for i in range(len(arr)): minimum = i for j in range(i + 1, len(arr)): if arr[j] < arr[minimum]: minimum = j arr[minimum], arr[i] = arr[i], arr[minimum] return arr
  • 插入排序:将列表分为已排序和未排序两部分,每次从未排序部分取出元素插入到已排序部分的适当位置。
def insertion_sort(arr): for i in range(len(arr)): cursor = arr[i] pos = i while pos > 0 and arr[pos - 1] > cursor: arr[pos] = arr[pos - 1] pos = pos - 1 arr[pos] = cursor return arr
  • 归并排序:采用分治法,将列表分成两半分别排序,然后将排序好的两半合并。
def merge_sort(arr): if len(arr) <= 1: return arr mid = len(arr) // 2 left, right = merge_sort(arr[:mid]), merge_sort(arr[mid:]) return merge(left, right, arr.copy())def merge(left, right, merged): left_cursor, right_cursor = 0, 0 while left_cursor < len(left) and right_cursor < len(right): if left[left_cursor] <= right[right_cursor]: merged[left_cursor+right_cursor] = left[left_cursor] left_cursor += 1 else: merged[left_cursor + right_cursor] = right[right_cursor] right_cursor += 1 for left_cursor in range(left_cursor, len(left)): merged[left_cursor + right_cursor] = left[left_cursor] for right_cursor in range(right_cursor, len(right)): merged[left_cursor + right_cursor] = right[right_cursor] return merged
  • 快速排序:也是分治法,选择一个基准元素,将列表分为小于基准和大于基准的两部分,然后递归排序。
def partition(array, begin, end): pivot_idx = begin for i in range(begin+1, end+1): if array[i] <= array[begin]: pivot_idx += 1 array[i], array[pivot_idx] = array[pivot_idx], array[i] array[pivot_idx], array[begin] = array[begin], array[pivot_idx] return pivot_idxdef quick_sort_recursion(array, begin, end): if begin >= end: return pivot_idx = partition(array, begin, end) quick_sort_recursion(array, begin, pivot_idx-1) quick_sort_recursion(array, pivot_idx+1, end)def quick_sort(array, begin=0, end=None): if end is None: end = len(array) - 1 return quick_sort_recursion(array, begin, end)

这些排序算法各有特点,适用于不同的场景。冒泡、选择和插入排序适合小规模数据或基本有序的数据,而归并和快速排序则更适合大规模数据。