冒泡排序(Bubble Sort)
冒泡排序是最简单的排序算法之一。它重复地遍历要排序的列表,比较相邻的元素并交换它们的位置,如果它们的顺序错误。
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr# 示例
print(bubble_sort([64, 34, 25, 12, 22, 11, 90]))
选择排序(Selection Sort)
选择排序的工作原理是不断地从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。
def selection_sort(arr):for i in range(len(arr)):min_idx = ifor j in range(i+1, len(arr)):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr# 示例
print(selection_sort([64, 25, 12, 22, 11]))
插入排序(Insertion Sort)
插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i-1while j >= 0 and key < arr[j]:arr[j + 1] = arr[j]j -= 1arr[j + 1] = keyreturn arr# 示例
print(insertion_sort([12, 11, 13, 5, 6]))
快速排序(Quick Sort)
快速排序是一种分治算法,它选择一个基准元素,分区操作使得比基准元素小的元素放在左边,比基准元素大的元素放在右边,然后递归地对两边进行排序。
def quick_sort(arr):if len(arr) <= 1:return arrelse:pivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)# 示例
print(quick_sort([3, 6, 8, 10, 1, 2, 1]))
归并排序(Merge Sort)
归并排序是一种分治算法,首先将数组分成两个小数组,分别进行排序,然后将排好序的子数组合并成一个有序的数组。
def merge_sort(arr):if len(arr) > 1:mid = len(arr) // 2L = arr[:mid]R = arr[mid:]merge_sort(L)merge_sort(R)i = j = k = 0while i < len(L) and j < len(R):if L[i] < R[j]:arr[k] = L[i]i += 1else:arr[k] = R[j]j += 1k += 1while i < len(L):arr[k] = L[i]i += 1k += 1while j < len(R):arr[k] = R[j]j += 1k += 1return arr# 示例
print(merge_sort([12, 11, 13, 5, 6, 7]))
堆排序(Heap Sort)
堆排序是一种基于堆数据结构的比较排序算法。
def heapify(arr, n, i):largest = il = 2 * i + 1r = 2 * i + 2if l < n and arr[i] < arr[l]:largest = lif r < n and arr[largest] < arr[r]:largest = rif 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[i], arr[0] = arr[0], arr[i]heapify(arr, i, 0)return arr# 示例
print(heap_sort([12, 11, 13, 5, 6, 7]))
计数排序(Counting Sort)
计数排序适用于排序范围有限的整数数组。
def counting_sort(arr):max_val = max(arr)m = max_val + 1count = [0] * mfor a in arr:count[a] += 1i = 0for a in range(m):for c in range(count[a]):arr[i] = ai += 1return arr# 示例
print(counting_sort([4, 2, 2, 8, 3, 3, 1]))
参考文章:https://blog.csdn.net/liudadaxuexi/article/details/140438371